Autore Topic: Errore con publishProgress()  (Letto 624 volte)

Offline Nemus

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S i9000
  • Sistema operativo:
    Windows Seven x64
Errore con publishProgress()
« il: 29 Aprile 2011, 15:47:55 CEST »
0
Salve a tutti,

ho una classe che estende AsyncTask. Nel metodo
Codice (Java): [Seleziona]
protected Void doInBackground(Void... params) {
        for (String url : imgUrls) {
            if (!imageCache.containsKey(url)) {
                Drawable bm = downloadImage(url);
                if (null != bm) {
                    imageCache.put(url, bm);
                    publishProgress();
                }
            }
        }
        return null;
    }
la chiamata a publishProgress mi da errore, e cioè:

Codice: [Seleziona]
04-29 15:28:49.039: ERROR/AndroidRuntime(9577): FATAL EXCEPTION: main
04-29 15:28:49.039: ERROR/AndroidRuntime(9577): java.lang.NullPointerException
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at com.apps.EveryEyeFeedReader.BatchImageDownloader.onProgressUpdate(BatchImageDownloader.java:51)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at com.apps.EveryEyeFeedReader.BatchImageDownloader.onProgressUpdate(BatchImageDownloader.java:1)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at android.os.Looper.loop(Looper.java:123)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at java.lang.reflect.Method.invokeNative(Native Method)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at java.lang.reflect.Method.invoke(Method.java:521)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
04-29 15:28:49.039: ERROR/AndroidRuntime(9577):     at dalvik.system.NativeStart.main(Native Method)

Qualcuno può darmi un aiuto?

Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore con publishProgress()
« Risposta #1 il: 29 Aprile 2011, 16:13:29 CEST »
0
Puoi pubblicare tutto l'AsyncTask?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nemus

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S i9000
  • Sistema operativo:
    Windows Seven x64
Re:Errore con publishProgress()
« Risposta #2 il: 29 Aprile 2011, 16:18:38 CEST »
0
Codice (Java): [Seleziona]
public class BatchImageDownloader extends AsyncTask<Void, Void, Void> {

    List<String> imgUrls = new ArrayList<String>();
    BaseAdapter adapter;
    HashMap<String, Drawable> imageCache;
       
    public BatchImageDownloader(BaseAdapter adapter, HashMap<String, Drawable> imageCache) {
        this.adapter = adapter;
        this.imageCache = imageCache;
    }

    public void addUrl(String url) {
        imgUrls.add(url);
        Log.i("imgDownloader", "url ADDED!");
    }

    @Override
    protected Void doInBackground(Void... params) {
        for (String url : imgUrls) {
            if (!imageCache.containsKey(url)) {
                Drawable bm = downloadImage(url);
                if (null != bm) {
                    imageCache.put(url, bm);
                    //publishProgress();
                }
            }
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        adapter.notifyDataSetChanged();
    }

    @Override
    protected void onPostExecute(Void result) {
        adapter.notifyDataSetChanged();
       
    }

    public Drawable downloadImage(String url) {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        try {          
            HttpResponse response = httpClient.execute(request);
            InputStream stream = response.getEntity().getContent();
            Drawable drawable = Drawable.createFromStream(stream, "src");
            Log.i("imgDownloader", "image DOWNLOADED!");
            return drawable;
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            return null;
        } catch (IllegalStateException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } catch (NullPointerException e){
                e.printStackTrace();
            return null;               
        }

    }

}

in pratica questa classe scarica in un thread apparte una serie di immagini che poi mette dentro un hashmap. Il problema da niubbo quale io sono è: nell'activity principale come faccio ad aggiornare l'interfaccia con le nuove immagini mano mano che esse vengono scaricate dall'AsyncTask?
« Ultima modifica: 29 Aprile 2011, 16:55:54 CEST da Nemus »