2017-08-27 145 views
0

我创建了一个列出手机中所有图像的应用程序,我正在使用媒体内容提供商来做它。 我的问题是我总是在我的应用程序中出现此错误,无论我运行它。java.lang.NullPointerException:尝试调用空对象上的接口方法'布尔android.database.Cursor.moveToFirst()'参考

08-28 00:31:27.001 16706-16706/com.chill.leoj.burp E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.chill.leoj.burp, PID: 16706 
                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chill.leoj.burp/com.chill.leoj.burp.Photos}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2521) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601) 
                    at android.app.ActivityThread.access$800(ActivityThread.java:178) 
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) 
                    at android.os.Handler.dispatchMessage(Handler.java:111) 
                    at android.os.Looper.loop(Looper.java:194) 
                    at android.app.ActivityThread.main(ActivityThread.java:5637) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:372) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
                    Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference 
                    at com.chill.leoj.burp.Photos.onCreate(Photos.java:159) 
                    at android.app.Activity.performCreate(Activity.java:6100) 
                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2601)  
                    at android.app.ActivityThread.access$800(ActivityThread.java:178)  
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)  
                    at android.os.Handler.dispatchMessage(Handler.java:111)  
                    at android.os.Looper.loop(Looper.java:194)  
                    at android.app.ActivityThread.main(ActivityThread.java:5637)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at java.lang.reflect.Method.invoke(Method.java:372)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

Photos.java:159

if (thumbCursor.moveToFirst()) { 
       newVVI.thumbPath = thumbCursor.getString(thumbCursor 
         .getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
       Log.v("", newVVI.thumbPath); 
      } 

请你能帮我解决这个问题。先谢谢你!

这是我的代码:

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 

    Uri uri1 = MediaStore.Images.Thumbnails.getContentUri("external"); 

    String[] thumbColumns = { MediaStore.Images.Thumbnails.DATA, 
      MediaStore.Images.Thumbnails.IMAGE_ID }; 

    String[] mediaColumns = { MediaStore.Images.Media._ID, 
      MediaStore.Video.Media.DATA, MediaStore.Images.Media.TITLE, 
      MediaStore.Images.Media.MIME_TYPE }; 


Cursor cursor = getContentResolver().query(uri, 
     mediaColumns, null, null, null); 



    if (cursor.moveToFirst()) { 
     do { 

      ImageViewInfo newVVI = new ImageViewInfo(); 
      int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)); 
      Cursor thumbCursor = getContentResolver().query(uri1, thumbColumns, MediaStore.Images.Thumbnails.IMAGE_ID 
        + "=" + id, null, null); 
      if (thumbCursor.moveToFirst()) { 
       newVVI.thumbPath = thumbCursor.getString(thumbCursor 
         .getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
       Log.v("", newVVI.thumbPath); 
      } 

      newVVI.filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)); 
      newVVI.title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.TITLE)); 
      Log.v("", newVVI.title); 
      newVVI.mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.MIME_TYPE)); 
      Log.v("", newVVI.mimeType); 
      ImageRows.add(newVVI); 
     } while (cursor.moveToNext()); 


     cursor.close(); 
     ImageAdapter = new ImageGalleryAdapter(Photos.this, ImageRows); 

    } 
    listView.setAdapter(new ImageGalleryAdapter(this, ImageRows)); 

编辑: 我忘了告诉我也尝试什么是自己的this link和调试它写在纸上,但没有真正发生,我不知道如果我这样做对。

回答

1

试试这个

if (thumbCursor.moveToFirst()!=null && (thumbCursor.moveToFirst())

if (thumbCursor.moveToFirst()) { 
       newVVI.thumbPath = thumbCursor.getString(thumbCursor 
         .getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
       Log.v("", newVVI.thumbPath); 
      } 

if (Cursor.moveToFirst()!=null && (Cursor.moveToFirst())

if (cursor.moveToFirst()) { 
     do { 

      ImageViewInfo newVVI = new ImageViewInfo(); 
      int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)); 
      Cursor thumbCursor = getContentResolver().query(uri1, thumbColumns, MediaStore.Images.Thumbnails.IMAGE_ID 
        + "=" + id, null, null); 
      if (thumbCursor.moveToFirst()) { 
       newVVI.thumbPath = thumbCursor.getString(thumbCursor 
         .getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
       Log.v("", newVVI.thumbPath); 
      } 
+0

非常感谢你这是我一直在寻找的答案! :) – asgardwin7

相关问题