2013-07-30 4 views
0

Я использую Picasso в одном из моих приложений для загрузки большого количества изображений для будущих применений, поскольку приложение будет полностью автономным после входа в систему.Picasso - java.lang.NullPointerException: key == null

Таким образом, после успешного Войти Я пытался загрузить изображения в AsyncTask с Progress

Для достижения этой цели я написал следующий код для загрузки кучу изображений

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

Хм это интересная проблема. Похоже, вы тоже используете Picasso 2.0. Вы подтвердили, что не прошли мимо null?

Чтобы отладить это, мне понадобится образец приложения (включая URL-адреса). Можете ли вы упаковать его и прикрепить?

Редактировать: Это теперь зафиксировано в Picasso 2.0.

https://github.com/square/picasso

+0

@Tanmay Мандал прибудете [picasso2 ] (https://twitter.com/dnkoutso/status/369987447834173440) здесь – Asthme