2013-07-30 36 views
0

我在我的一個應用程序中使用Picasso下載大量圖像以備將來使用,因爲應用程序在登錄後將完全脫機。Picasso - java.lang.NullPointerException:key == null

所以後成功登錄,我試圖下載圖像中的AsyncTask與進展

爲了實現我寫了下面的代碼來下載一些圖片的目標

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Iterator; 
import java.util.List; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 

import com.squareup.picasso.Picasso; 

public class CacheActivity extends Activity { 
    int size = 0; 
    final List<String> urls = new ArrayList<String>(); 
    int totalImageSize; 
    static Picasso picasso; 

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

     Collections.addAll(urls, Data.URLS); 
     Collections.addAll(urls, Data.URLS); 
     Collections.addAll(urls, Data.URLS); 
     totalImageSize = urls.size(); 

     picasso = Picasso.with(CacheActivity.this); 
     picasso.setDebugging(true); 

     new TestTask().execute(); 

    } 

    public class TestTask extends AsyncTask<Void, Integer, Void> 

    { 
     ProgressDialog dialog; 

     @Override 
     protected void onPreExecute() { 
      dialog = new ProgressDialog(CacheActivity.this); 
      dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      dialog.setMax(totalImageSize); 
      dialog.setMessage("1 - 100"); 
      dialog.setCanceledOnTouchOutside(false); 
      dialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      for (Iterator iterator = urls.iterator(); iterator.hasNext();) { 
       final String url = (String) iterator.next(); 

       try { 
        picasso.load(url).get(); 
        } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       size = size + 1; 
       publishProgress(size); 

      System.out.println("CacheActivity.TestTask.doInBackground()"); 

      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      dialog.dismiss(); 
     } 

    } 

} 

但是,當我運行的應用程序,我收到以下錯誤

07-30 12:55:42.334: W/System.err(2369): java.lang.NullPointerException: key == null 
07-30 12:55:42.334: W/System.err(2369):  at com.squareup.picasso.LruCache.get(LruCache.java:50) 
07-30 12:55:42.334: W/System.err(2369):  at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:101) 
07-30 12:55:42.334: W/System.err(2369):  at com.squareup.picasso.RequestBuilder.get(RequestBuilder.java:305) 
07-30 12:55:42.344: W/System.err(2369):  at com.example.picasso.CacheActivity$TestTask.doInBackground(CacheActivity.java:61) 
07-30 12:55:42.344: W/System.err(2369):  at com.example.picasso.CacheActivity$TestTask.doInBackground(CacheActivity.java:1) 
07-30 12:55:42.344: W/System.err(2369):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
07-30 12:55:42.344: W/System.err(2369):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
07-30 12:55:42.344: W/System.err(2369):  at java.lang.Thread.run(Thread.java:856) 
07-30 12:55:42.334: W/System.err(2369): java.lang.NullPointerException: key == null 
07-30 12:55:42.334: W/System.err(2369):  at com.squareup.picasso.LruCache.get(LruCache.java:50) 
07-30 12:55:42.334: W/System.err(2369):  at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:101) 
07-30 12:55:42.334: W/System.err(2369):  at com.squareup.picasso.RequestBuilder.get(RequestBuilder.java:305) 
07-30 12:55:42.344: W/System.err(2369):  at com.example.picasso.CacheActivity$TestTask.doInBackground(CacheActivity.java:61) 
07-30 12:55:42.344: W/System.err(2369):  at com.example.picasso.CacheActivity$TestTask.doInBackground(CacheActivity.java:1) 
07-30 12:55:42.344: W/System.err(2369):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
07-30 12:55:42.344: W/System.err(2369):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
07-30 12:55:42.344: W/System.err(2369):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
07-30 12:55:42.344: W/System.err(2369):  at java.lang.Thread.run(Thread.java:856) 

有什麼我做錯了嗎?

+0

我在做類似的東西在這裏!HTTP://stackoverflow.com/questions/18808114/picasso-loading-of-image-spawned-inside-asynctask – toobsco42

回答

0

嗯,這是一個有趣的問題。你似乎也在使用畢加索2.0。你確認你沒有通過null嗎?

我需要一個示例應用程序(包括URL)來調試這個。你可以打包並附上?

編輯:現已在畢加索2.0中修復。

https://github.com/square/picasso

+0

@Tanmay曼達爾GET [picasso2 ](https://twitter.com/dnkoutso/status/369987447834173440) – Asthme