Android 相机停止,位图为空
android上新增了一个按钮,我可以打开gallery,选择一张图片并将其显示在imageview中,该按钮工作正常,另一个按钮可以使用Intent打开相机,我可以打开相机拍照,但单击save image后,应用程序崩溃。拍摄的图像保存在正确的文件夹中。当Debbug进入应用程序时,错误会在这一行抛出:Android 相机停止,位图为空,android,android-camera,onactivityresult,Android,Android Camera,Onactivityresult,android上新增了一个按钮,我可以打开gallery,选择一张图片并将其显示在imageview中,该按钮工作正常,另一个按钮可以使用Intent打开相机,我可以打开相机拍照,但单击save image后,应用程序崩溃。拍摄的图像保存在正确的文件夹中。当Debbug进入应用程序时,错误会在这一行抛出: filePath = data.getData(); 位图显示为空。 我已经添加了权限,并且读了很多关于这方面的帖子,但仍然无法找出问题所在。感谢您的帮助。 这是密码 @Override
filePath = data.getData();
位图显示为空。
我已经添加了权限,并且读了很多关于这方面的帖子,但仍然无法找出问题所在。感谢您的帮助。
这是密码
@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;
}
日志:
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上,我点击一个按钮发送图片并将其存储在db中,我就会得到这个错误
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)
我不知道你的密码是干什么的。但是,日志显示:由于空指针异常,应用程序已崩溃 检查
ZygoteInit.java
类的main
方法。在1120
行,您尝试从null实例获取一些内容
你应该解决这个问题。我想问题就在这里,尽管如此
bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), filePath);
像这样改变
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
您可以在要求使用摄像头时获取位图
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
您可以在从库中拾取图像时获取位图
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();
}
试试这个
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);
和ononActivityResult
if (requestCode == CAMERA_CLICK_RESULT && resultCode == RESULT_OK) {
Bitmap photo = null;
try {
photo = MediaStore.Images.Media.getBitmap(
getContentResolver(), imageUri);
} catch (IOException e) {
e.printStackTrace();
}
}
对不起,这是什么ImagePicker,我在上面看到了“无法解析符号”您添加了这一行吗???尝试在Intent=newintent(MediaStore.ACTION\u IMAGE\u CAPTURE)中添加此行;并尝试使用自己的代码bitmap=MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(),filePath);我已经添加了这一行,usedbitmap=MediaStore.Images.Media.getBitmap(getActivity().getContentRe)解算器(),文件路径);保存图片后,应用程序不会崩溃,但在我代码的另一部分会崩溃。让我给您演示一下,看您是否可以帮助我这是行光标;你是偶然在三星设备上测试的吗?是的,它是三星设备@Enzokie这是三星的一个缺陷;)因此,假设getData在某个时候为空。我在使用Intent之前已经对它进行了测试,但将图片保存在手机内存和it-work属性中,但不得不更改它,因为它在牛轧糖设备上不起作用@Enzokie如果您记得在打开相机之前,您实际上提供了一个
Uri
,在这种情况下,请保留该Uri
实例,直到保存图像。不要依赖于getData
,因为它有自己的问题。别忘了保留它的实例,因为根据我的经验,三星在杀掉后台活动方面臭名昭著。谢谢,我会检查一下,并更新有关代码的信息。