相机停止,位图为空

时间:2017-08-14 05:14:28

标签: android android-camera onactivityresult

Android上的新功能,我有一个按钮可以打开图库并选择一张图片并将其显示为一个正常工作的imageview,另一个按钮用Intent打开相机,我可以打开相机拍照但点击保存后图像应用程序崩溃。拍摄的图像保存在正确的文件夹中。当debbugin应用程序错误抛出它在这一行:

filePath = data.getData();

和位图将其显示为null。 我已经添加了权限,我已阅读了很多关于此的帖子,但仍然无法弄清楚是什么问题。任何帮助表示赞赏。 这是代码。

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

    if(requestCode == CAM_REQUEST && resultCode == Activity.RESULT_OK ){
        Toast.makeText(TerminosYC.this.getActivity(), "si hay foto", Toast.LENGTH_LONG).show();

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);

            areaLeyendaImagen.setFocusableInTouchMode(true);
            areaLeyendaImagen.requestFocus();
            areaLeyendaImagen.setFocusable(true);
            buttonChoose.setError(null);

        } 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的:

a E/MotionRecognitionManager: mSContextService = null
08-13 23:50:38.243 27745-27745/com.example.lupitagarcia.yosoyvallarta 
E/MotionRecognitionManager: motionService = 
com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@39e18a4
08-13 23:50:51.483 27745-27745/com.example.lupitagarcia.yosoyvallarta 
E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                    Process: com.example.lupitagarcia.yosoyvallarta, PID: 27745
                                                                                    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=66849, result=-1, data=null} to activity {com.example.lupitagarcia.yosoyvallarta/com.example.lupitagarcia.yosoyvallarta.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
                                                                                        at android.app.ActivityThread.deliverResults(ActivityThread.java:5004)
                                                                                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5047)
                                                                                        at android.app.ActivityThread.access$1600(ActivityThread.java:229)
                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875)
                                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                        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)
                                                                                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
                                                                                        at com.example.lupitagarcia.yosoyvallarta.TerminosYC.onActivityResult(TerminosYC.java:463)
                                                                                        at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:165)
                                                                                        at android.app.Activity.dispatchActivityResult(Activity.java:7165)
                                                                                        at android.app.ActivityThread.deliverResults(ActivityThread.java:5000)
                                                                                        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5047) 
                                                                                        at android.app.ActivityThread.access$1600(ActivityThread.java:229) 
                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1875) 
                                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                        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) 

更新:

一旦图片附加在imageview上,我点击一个按钮发送图片将其存储在数据库中,我就会收到此错误。

FATAL EXCEPTION: main
                                                                                    Process: com.example.lupitagarcia.yosoyvallarta, PID: 15254
                                                                                    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:549)
                                                                                        at com.example.lupitagarcia.yosoyvallarta.TerminosYC$1.onClick(TerminosYC.java:352)
                                                                                        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)

4 个答案:

答案 0 :(得分:0)

我不知道你的代码是做什么的。但是,日志说:由于空指针异常,应用程序已崩溃。

检查main课程的ZygoteInit.java方法。在1120行,您尝试从null实例获取内容。

你应该解决这个问题。

答案 1 :(得分:0)

我认为问题在这里,就是这个

bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), filePath);

像这样改变

Bitmap bitmap = (Bitmap) data.getExtras().get("data");

答案 2 :(得分:0)

REQUEST_CAMERA

时可以获取位图
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

您可以从图库

中获取PICK_IMAGE_REQUEST时获取位图
   Uri uri = data.getData();
  try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(mcontext.getContentResolver(), uri);
                // Log.d(TAG, String.valueOf(bitmap));
     } catch (Exception e) {
                    e.printStackTrace();
     }

答案 3 :(得分:0)

试试这个

values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "New Picture");
values.put(MediaStore.Images.Media.DESCRIPTION, "From your Camera");
imageUri = getContentResolver().insert(
     MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CAMERA_CLICK_RESULT);

onActivityResult

 if (requestCode == CAMERA_CLICK_RESULT && resultCode == RESULT_OK) {
        Bitmap photo = null;
        try {
            photo = MediaStore.Images.Media.getBitmap(
                    getContentResolver(), imageUri);
        } catch (IOException e) {
            e.printStackTrace();
        }
   }