Autore Topic: AsyncTask FTP Client e ImageView  (Letto 536 volte)

Offline Laerte

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
AsyncTask FTP Client e ImageView
« il: 24 Gennaio 2016, 20:40:44 CET »
0
Buona sera a tutti , sto cercando di visualizzare delle immagini presenti in un SERVER FTP , non riesco a capire il problema , in pratica semra funzionare ma non mi restituisce alcuna immagine , dopo la Progress Bar mi restituisce una schermata bianca...
posto l'intero  codice che potrebbe essere utile a qualcuno :

Codice (Java): [Seleziona]
public class cantine extends Activity implements OnItemClickListener {
        public static FTPClient mFTPClient = null;
        public static String[] lista = null;
        public static String host = "xxxxxxxxaltervista.org";
        public static String cartella = "/vestiti";
        private LayoutInflater inflater;
        public ImageLoader imageLoader = ImageLoader.getInstance();
        public static ArrayList<String> imageUrls = new ArrayList<String>();
        public ProgressDialog dialog;
        public DisplayImageOptions options;

        public GridView grid;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.gallery);

               
                new FtpTask().execute();

       

                options = new DisplayImageOptions.Builder()
                                .showImageOnLoading(R.drawable.ic_stub)
                                .showImageForEmptyUri(R.drawable.ic_empty)
                                .showImageOnFail(R.drawable.ic_error).cacheInMemory(true)
                                .cacheOnDisk(true).considerExifParams(true)
                                .bitmapConfig(Bitmap.Config.RGB_565)
                                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED).build();
       
                grid = (GridView) findViewById(R.id.grid);
                ((GridView) grid).setAdapter(new ImageAdapter());


                grid.setOnItemClickListener(new OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {

                                //
                        }
                });

        }

        public class ImageAdapter extends BaseAdapter {
                @Override
                public int getCount() {
                        return imageUrls.size();
                }

                @Override
                public Object getItem(int position) {
                        return null;
                }

                @Override
                public long getItemId(int position) {
                        Log.v("SetAdapter", "Position" + position);
                        return position;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                        final ViewHolder holder;
                        View view = convertView;
                        if (view == null) {
                                view = inflater
                                                .inflate(R.layout.item_grid_image, parent, false);
                                holder = new ViewHolder();
                                assert view != null;
                                holder.imageView = (ImageView) view.findViewById(R.id.image);
                                holder.progressBar = (ProgressBar) view
                                                .findViewById(R.id.progress);
                                view.setTag(holder);
                        } else {
                                holder = (ViewHolder) view.getTag();
                        }

                        ImageLoader.getInstance().displayImage(imageUrls.get(position),
                                        holder.imageView, options,
                                        new SimpleImageLoadingListener() {
                                                @Override
                                                public void onLoadingStarted(String imageUri, View view) {
                                                        holder.progressBar.setProgress(0);
                                                        holder.progressBar.setVisibility(View.VISIBLE);
                                                }

                                                @Override
                                                public void onLoadingFailed(String imageUri, View view,
                                                                FailReason failReason) {
                                                        holder.progressBar.setVisibility(View.GONE);
                                                }

                                                @Override
                                                public void onLoadingComplete(String imageUri,
                                                                View view, Bitmap loadedImage) {
                                                        holder.progressBar.setVisibility(View.GONE);
                                                }
                                        }, new ImageLoadingProgressListener() {
                                                @Override
                                                public void onProgressUpdate(String imageUri,
                                                                View view, int current, int total) {
                                                        holder.progressBar.setProgress(Math.round(100.0f
                                                                        * current / total));
                                                }
                                        });

                        return view;
                }
        }

        static class ViewHolder {
                ImageView imageView;
                ProgressBar progressBar;
        }
       

        public static void initImageLoader(Context context) {
                // This configuration tuning is custom. You can tune every option, you
                // may tune some of them,
                // or you can create default configuration by
                // ImageLoaderConfiguration.createDefault(this);
                // method.
                ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(
                                context);
                config.threadPriority(Thread.NORM_PRIORITY - 2);
                config.denyCacheImageMultipleSizesInMemory();
                config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
                config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
                config.tasksProcessingOrder(QueueProcessingType.LIFO);
                config.writeDebugLogs(); // Remove for release app

                // Initialize ImageLoader with configuration.
                ImageLoader.getInstance().init(config.build());
        }

        public void ftpConnect(String host, String username, String password,
                        int port) {
                mFTPClient = new FTPClient();

                try {
                        if (android.os.Build.VERSION.SDK_INT > 9) {
                                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                                                .permitAll().build();
                                StrictMode.setThreadPolicy(policy);
                        }
                        // connecting to the host
                        mFTPClient.connect(host, port);

                        // now check the reply code, if positive mean connection success
                        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
                                // login using username & password
                                boolean status = mFTPClient.login(username, password);

                                mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
                                mFTPClient.enterLocalPassiveMode();

                                FTPFile[] ftpFiles = mFTPClient.listFiles(cartella);
                                int length = ftpFiles.length;

                                for (int i = 0; i < length; i++) {
                                        String name = ftpFiles[i].getName();
                                        boolean isFile = ftpFiles[i].isFile();

                                        if (isFile) {
                                                Log.d("TAG", "File : " + host + cartella + "/" + name);
                                                imageUrls.add(host + cartella + "/" + name);
                                        } else {
                                                Log.d("TAG", "Directory : " + name);
                                        }
                                }
                                ftpDisconnect();
                        }
                } catch (Exception e) {
                        Log.d("TAG", "Error: could not connect to host " + host);
                }

        }

        public boolean ftpDisconnect() {
                try {
                        mFTPClient.logout();
                        mFTPClient.disconnect();
                        return true;
                } catch (Exception e) {
                        Log.d("TAG", "Error occurred while disconnecting from ftp server.");
                }

                return false;
        }

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                // TODO Auto-generated method stub

        }

        private class FtpTask extends AsyncTask<Void, Void, FTPClient> {
                protected void onPreExecute() {
                        dialog = new ProgressDialog(cantine.this);
                        dialog.setMessage("Caricamento immagine...");
                        dialog.show();
                        return;
                }

                protected FTPClient doInBackground(Void... args) {
                        ftpConnect(host, "ACCOUNT", "PASSWORD", 21);
                        return null;

                }

                protected void onPostExecute(FTPClient result) {
                        dialog.dismiss();
                        return;
                }
        }

}
]

Si collega e scarica gli URL delle immagini , ma non visualizzo la GridView delle immagini , crasha subito, allego il LOG.

Grazie in anticipo ;)
« Ultima modifica: 25 Gennaio 2016, 17:58:18 CET da Laerte »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1188
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:AsyncTask e FTP Client
« Risposta #1 il: 25 Gennaio 2016, 10:39:24 CET »
+1
Se hai URL delle immagini USA Picasso o altre librerie.
Inoltre è normale che getItem nel tuo adapter torni null?

Offline Laerte

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:AsyncTask e FTP Client
« Risposta #2 il: 25 Gennaio 2016, 10:46:16 CET »
0
Ora ho provato con Picasso.
Tutto il problema sta qui , l'AsyncTask mi restituisce bene il link , ma Picasso non lo carica:

Codice (Java): [Seleziona]
private class FtpTask extends AsyncTask<Void, Void, ArrayList<String>> {
        Context mContext;    

                ArrayList<String> temp = new ArrayList<String>();

                protected void onPreExecute() {
                        dialog = new ProgressDialog(picasso.this);
                        dialog.setMessage("Caricamento immagine...");
                        dialog.show();
                       
                }

                protected ArrayList<String> doInBackground(Void... args) {

                        temp=ftpConnect(host, "ACCOUNT", "PASSW", 21);
                        return temp;

                }
               
                protected void onPostExecute(ArrayList<String> result) {
                        dialog.dismiss();
                        Picasso.with(mContext).load(temp.get(0)).into(imageView);

                        Log.d("TAG", "PICASSO : " + temp.get(0));

                }

       
        }

}

Post unito: [time]25 Gennaio 2016, 20:43:04 CET[/time]
Credo che il modo giusto per passargli il Context e l'ImageView sia questo , ma niente da fare ugualmente:

Codice (Java): [Seleziona]
private class FtpTask extends AsyncTask<Void, Void, ArrayList<String>> {

        ImageView  mImageView;
        Context mContext;    
        public FtpTask(Context context,ImageView imageView){
           this.mImageView=imageView;
           this.mContext=context;

        }

                ArrayList<String> temp = new ArrayList<String>();

                protected void onPreExecute() {
                        dialog = new ProgressDialog(picasso.this);
                        dialog.setMessage("Caricamento immagine...");
                        dialog.show();
                       
                }

                protected ArrayList<String> doInBackground(Void... args) {

                        temp=ftpConnect(host, "ACCOUNT", "PASSW", 21);
                        return temp;

                }
               
                protected void onPostExecute(ArrayList<String> result) {
                        dialog.dismiss();
                        Picasso.with(mContext).load(temp.get(0)).into(mImageView);

                        Log.d("TAG", "PICASSO : " + temp.get(0));

                }

       
        }


Post unito: 25 Gennaio 2016, 22:14:47 CET
ho risolto....a Picasso non piacciono gli url senza l ' "http:// " xD
« Ultima modifica: 25 Gennaio 2016, 22:14:47 CET da Laerte, Reason: Merged DoublePost »