MediaStore.Images.Media.insertImage在某些设备中返回null

weixin_38055275 2019-09-12 03:00:15

可能重复但未找到任何解决方案。 我想修改图像并使用MediaStore将其保存到设备。用下面的代码 - : public class Utils { private Utils() { } static Uri getUri(Context context, Bitmap bitmap) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "Title", null); //returning null in some devices Log.d("TAG", "getUri: "+path); return Uri.parse(path); //this is returning null which cause the app crash } static Bitmap getBitmap(Context context, Uri uri) throws IOException { return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri); } } 此代码是在大多数设备的工作很好,但问题是,在MediaStore.Images.Media.insertImage像一些设备返回null - : 。三星J7(2016) 。 LG Magna LTE 。 Android模拟器API 21 我很惊讶这个应用程序工作在Android模拟器API 26。但得到崩溃Android模拟器API 21 我已经搜索谷歌,我也发现了同样的问题here但没有找到任何足够的答案。 注 - :我已经使用运行权限读/写外部存储 但在提到的设备仍然得到崩溃。下面是我的崩溃对数: Fatal Exception: java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:0, request=1, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:51 flg=0x1 }} to activity {com.example/com.scanlibrary.ScanActivity}: java.lang.NullPointerException: uriString at android.app.ActivityThread.deliverResults(ActivityThread.java:3574) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617) at android.app.ActivityThread.access$1300(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by java.lang.NullPointerException: uriString at android.net.Uri$StringUri.<init>(Uri.java:470) at android.net.Uri$StringUri.<init>(Uri.java:460) at android.net.Uri.parse(Uri.java:432) at com.scanlibrary.Utils.getUri(Utils.java:24) at com.scanlibrary.PickImageFragment.postImagePick(PickImageFragment.java:228) at com.scanlibrary.PickImageFragment.onActivityResult(PickImageFragment.java:208) at android.app.Activity.dispatchActivityResult(Activity.java:6196) at android.app.ActivityThread.deliverResults(ActivityThread.java:3570) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617) at android.app.ActivityThread.access$1300(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 感谢








...全文
779 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38077132 2019-09-12
  • 打赏
  • 举报
回复

而不是使用下面的代码 - : String path = MediaStore.Media.insertImage(context.getContentResolver(),bitmap,"Title",null); 使用此代码(下) - : ContentValues values=new ContentValues(); values.put(MediaStore.Images.Media.TITLE,"Title"); values.put(MediaStore.Images.Media.DESCRIPTION,"From Camera"); Uri path=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values); 传递值如果它不工作,则为null。
weixin_38101849 2019-09-12
  • 打赏
  • 举报
回复

protected void onActivityResult(int requestCode, int resultCode,Intent data) { if (requestCode == RequestPermissionCode && resultCode == RESULT_OK) { try { String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, filePathColumn, null, null, null); if (cursor == null) return; // find the file in the media area cursor.moveToLast(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String filePath = "file:///"+cursor.getString(columnIndex); cursor.close(); actualImage = FileUtil.from(this,Uri.parse(filePath)); actualImageView.setImageBitmap(BitmapFactory.decodeFile(actualImage.getAbsolutePath())); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } } } 使用onActvittyResult方法,我希望它能工作。

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧