2013-07-30 5 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 포함)이 필요합니다. 짐을 싸서 붙일 수 있습니까?

편집 : 이제 Picasso 2.0에서 수정되었습니다. 내가 여기에 비슷한 일을하고 있어요

https://github.com/square/picasso

+0

@Tanmay 만달 GET [picasso2 ] (https://twitter.com/dnkoutso/status/369987447834173440) 여기에 – Asthme