0

このアプリケーションでは、このアプリケーションでは、名前、電子メールなどのような編集テキストを入力してから、ギャラリーを開くボタンを使用して画像を追加するか、あなたはこの情報をdbに送るためにボタンを押す必要があります。ギャラリーから写真を追加してこの情報を送信すると機能しますが、同じ写真を撮るとアプリがクラッシュします。私は何が問題なのかわからないし、誰かが私を助けてくれて本当に感謝しています。または、この問題の原因となるものを教えてください。アプリケーションヌルオブジェクト参照でクラッシュする

@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) 
+0

'cursor.moveToFirst();'このコードはエラーをスローしています。これは、カーソルがnullであることを意味します。 –

+0

しかし、なぜこれは分かりません。それを解決する方法は、ギャラリーから写真を添付するときに同じことが起こらないからです。 @ArjunGurung –

+0

この行には異なるCursor変数を使用してください。 'cursor = getActivity()。getContentResolver()。query(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI、 null、MediaStore.Images.Media._ID + "=? "、新しい文字列[] {document_id}、null); ' – Danger

答えて

0

は何の努力と思いません! とにかくあなたがそこにnull値を取得しているような理由は、あなたの#uriあるこの

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

を試してみてください。 まず、適切な画像URIを取得しているかどうかを確認してください。

+0

ありがとう、それを試してみてください。 –

+0

そのコードを追加すると、別の行でアプリケーションがクラッシュする文字列document_id = cursor.getString(0); –

+0

あなたはそれをデバッグすることができますか?上記の答えに言及しているように、if条件にコンパイラが入ります。いいえ、あなたが間違った方法であなたのcorsorにお問い合わせください。 – Radhey

関連する問題