【问题标题】:App Crashes on a null object reference [duplicate]应用程序在空对象引用上崩溃 [重复]
【发布时间】:2018-01-29 01:43:40
【问题描述】:

我是 android 新手,在这个应用程序中,您需要填写一些编辑文本,例如姓名、电子邮件等,然后使用打开图库的按钮或其他拍照按钮添加图片,然后您就拥有了按下按钮将此信息发送到数据库。如果我从图库中添加图片并发送此信息,它会起作用,但是当我这样做时,应用程序会崩溃。我不确定可能是什么问题,我非常感谢有人帮助我。或者告诉我是什么导致了这个问题。

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == CAM_REQUEST && resultCode == Activity.RESULT_OK ){

try {
bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), (filePath));
getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, filePath));
} catch (IOException e) {
            e.printStackTrace();
        }

 }else if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK ) {
        filePath = data.getData();
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), filePath);
            imageView.setImageBitmap(bitmap);

            areaLeyendaImagen.setVisibility(View.VISIBLE);
            areaFotoCargada.setVisibility(View.VISIBLE);
            imagencargada.setVisibility(View.VISIBLE);
            textoimagencargada.setVisibility(View.VISIBLE);
            area_cerrarIagen.setVisibility(View.VISIBLE);
            cerrarImagen.setVisibility(View.VISIBLE);
            buttonChoose.setError(null);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public String getPath(Uri uri) {
    Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
    cursor.close();

    cursor = getActivity().getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();

    return path;
}

LOGCAT:

08-20 23:23:53.320 11022-11022/com.example.lupitagarcia.yosoyvallarta E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                    Process: com.example.lupitagarcia.yosoyvallarta, PID: 11022
                                                                                    java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToFirst()' on a null object reference
                                                                                        at com.example.lupitagarcia.yosoyvallarta.TerminosYC.getPath(TerminosYC.java:579)
                                                                                        at com.example.lupitagarcia.yosoyvallarta.TerminosYC$1.onClick(TerminosYC.java:355)
                                                                                        at android.view.View.performClick(View.java:5721)
                                                                                        at android.widget.TextView.performClick(TextView.java:10936)
                                                                                        at android.view.View$PerformClick.run(View.java:22620)
                                                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                        at android.os.Looper.loop(Looper.java:148)
                                                                                        at android.app.ActivityThread.main(ActivityThread.java:7406)
                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

【问题讨论】:

  • cursor.moveToFirst(); 此代码抛出错误意味着光标为空。
  • 但我不知道这是为什么。或如何解决它,因为从图库中附加图片时不会发生相同的情况。 @ArjunGurung
  • 在这一行使用不同的游标变量:'cursor = getActivity().getContentResolver().query( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);'
  • 你的意思是说 if requestcode== CAM_REQUEST then 'cursor = getActivity().getContentResolver().query( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_UR‌​I, null, MediaStore.Images .Media._ID + " = ? ", new String[]{document_id}, null);或者你是什么意思? @危险
  • 关闭光标可能是问题所在。尝试使用不同的光标变量。定义两个游标变量。 public String getPath(Uri uri) { Cursor cursor2 = getActivity().getContentResolver().query( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Media._ID + " = ? ", new String []{document_id},空); cursor2.moveToFirst();字符串路径 = cursor2.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); cursor2.close();返回路径; }

标签: android nullpointerexception android-cursor onactivityresult


【解决方案1】:

似乎没有任何努力! 反正试试这个

if(mCursor!=null && mCursor.getCount()>0 ){
    mCursor.moveToFirst();
}

原因是你的 #uri ,因为你在那里得到空值。 首先确保您获得了正确的图像 uri!

【讨论】:

  • 谢谢,让我试试。
  • 添加该代码,应用程序在另一行崩溃 String document_id = cursor.getString(0);
  • 你能调试一下吗?正如我在上面的答案中提到的,编译器是否进入 if 条件。如果否,那么您是 .query 以错误的方式向您的 corsor 查询。
  • 在调试时我看不到任何错误,可能是我没有正确调试。
  • 您需要先学习和调试代码执行与否。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2018-05-14
相关资源
最近更新 更多