空对象引用上的 onActivityResult 数据
Posted
技术标签:
【中文标题】空对象引用上的 onActivityResult 数据【英文标题】:onActivityResult data on a null object reference 【发布时间】:2019-04-07 09:48:13 【问题描述】:当我启动相机时,数据为空。我不知道为什么..这是相机的代码:
((Button)view.findViewById(R.id.BtnOpenCamera)).setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String file = "myimg.jpg";
File path = new File(Environment.getExternalStorageDirectory()+"/"+file);
Uri outputFileUri = FileProvider.getUriForFile(getActivity().getApplicationContext(), BuildConfig.APPLICATION_ID
+ ".provider", path);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
cameraIntent.putExtra("return-data", true);
startActivityForResult(cameraIntent, 0);
);
编辑;添加 onActivityResult 代码块
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
Log.e(LoggerID,requestCode+" "+resultCode+" "+(data != null));
【问题讨论】:
发布onActivityResult()
代码
我添加了兄弟@forpas
请提供堆栈跟踪
【参考方案1】:
检查是否有帮助
((Button)view.findViewById(R.id.BtnOpenCamera)).setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// Starts the Camera
Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intentCamera, 0);
);
然后去捕捉onActivityResult()
中的uri
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
try
// 1) Get the bitmap from the taken picture;
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
// 2) Converts the bitmap into image String URL;
Uri uri = ImageManager.getImageUriFromBitmap(getActivity(), bitmap, 50);
String imgURL = ImageManager.getRealPathFromUri(getActivity(), uri);
// Use the imgURL the way you need.
catch (NullPointerException e)e.printStackTrace();
【讨论】:
【参考方案2】:如果相机在fragment上打开,也应该在activity中调用
【讨论】:
我在片段中运行它。 那么你的设备名称和sdk版本是什么?【参考方案3】:ACTION_IMAGE_CAPTURE
意图由任何注册以在特定设备上处理它的相机应用程序来实现。即使您只查看制造商预装在设备上的“官方”相机应用,此类应用也会有很大差异。
并非所有这些应用程序,尤其是在小众设备上的应用程序,都完全符合官方规范。众所周知,三星手机也广泛对待意向合同要求。
在您的情况下,代码在未记录的"return-data"
extra 上使用。我在一些与三星相关的论坛上看到它提到过,但即便如此也没有证据表明它确实有效。
only reliable reference 到 data 的 ACTION_IMAGE_CAPTURE
意图状态,
调用者可能会传递一个额外的 EXTRA_OUTPUT 来控制此图像的写入位置。如果 EXTRA_OUTPUT 不存在,则在额外字段中将小尺寸图像作为位图对象返回。这对于只需要小图像的应用程序很有用。
但在现实生活中,即使这样也不能保证。这意味着您的应用应该准备好从ACTION_IMAGE_CAPTURE
获取空的data,因为即使您没有通过额外的 EXTRA_OUTPUT。
【讨论】:
以上是关于空对象引用上的 onActivityResult 数据的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NullPointerException:空对象引用上的 FloatingActionButton.setVisibility(int)'
空对象引用上的 void android.view.View.dispatchWindowVisibilityChanged(int)'