3

我正在製作一個應用程序,它使用AsyncTask來選擇3個圖庫。 我的AsyncTask的含量>是:Android在檢索圖像時給出了空指針

public class ShoppingGallery extends AsyncTask<Void, Void, List<Bitmap>> { 
    private Activity activity; 
    private static final String LOG_TAG = ShoppingGallery.class.getSimpleName(); 

    private Uri uri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI; 
    private String[] projection = {MediaStore.Images.Thumbnails.DATA}; 
    private Cursor imageCursor; 

    public ShoppingGallery(Activity activity){ 
     this.activity = activity; 
     imageCursor = activity.getContentResolver().query(uri, projection, null, null, null); 
    } 
@Override 
    protected List<Bitmap> doInBackground(Void... params) { 

    List<Bitmap> imgs = new ArrayList<>(); 
    while(imageCursor.moveToNext()){ 
     try { 
      if(imgs.size() < 3) 
      imgs.add(MediaStore.Images.Media.getBitmap(activity.getContentResolver(), imageCursor.getNotificationUri())); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "problem with the image loading: " + e); 
     } 
    } 
    return imgs; 
} 

這對我來說似乎是好了,但是當我運行我的程序崩潰,並給出以下錯誤消息: 11月8日至13日:14:11.662 22360-22360/COM .example.jonas.shoppinglist E/ShoppingContacts:圖像執行失敗:

java.util.concurrent.ExecutionException: 顯示java.lang.NullPointerException:嘗試調用虛擬方法 「java.lang.String中android.net .Uri.getScheme()'爲空對象 參考

因此,檢測到問題。我的程序抱怨的行是:

imgs.add(MediaStore.Images.Media.getBitmap(activity.getContentResolver(), imageCursor.getNotificationUri())); 

什麼是源和解決方案?

+1

似乎imageCursor.getNotificationUri()返回null。檢查null並重試。 –

+1

我調試過,並有一個我的遊標,mNotifyUri,這是一個參數爲null。這是怎麼回事? – Jonas

回答

2

你似乎誤解了Cursor.getNotificationUri()方法。
我想你正試圖得到返回的位圖的問題。
如果是真的,試試這個:

if (imgs.size() < 3) { 
      String uriStr = imageCursor.getString(0); 
      Uri uri = null; 
      if (uriStr == null) 
       continue; 
      try { 
       uri = Uri.parse(uriStr); 
      } catch (Exception e) { 
       // log exception 
      } 
      if (uri == null) 
       continue; 
      Bitmap bm = null; 
      try { 
       bm = 
         MediaStore.Images.Media.getBitmap(activity 
           .getContentResolver(), uri); 
      } catch (IOException e) { 
       // log exception 
      } 
      if (bm == null) 
       continue; 
      imgs.add(bm); 
      if (imgs.size() == 3) 
       break; 
     } 
+0

這似乎是一個非常好的答案,因爲錯誤消失了。當我調試時,我總是得到一個FileNotFoundException就行了:bm = MediaStore.Images.Media.getBitmap(activity.getContentResolver(),uri);你知道這是怎麼回事嗎? – Jonas

+0

如果您在設備上測試> = API 19,那麼您可能需要Read_external_permision http://developer.android.com/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE。如果它不起作用,那麼我現在就沒有想法了。 – Minhtdh

+0

這解決了它,謝謝 – Jonas

相關問題