当前位置: 首页 > 知识库问答 >
问题:

OnActivityResult活动错误:传递结果ResultInfo失败

秋煌
2023-03-14
  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK) {
        android.net.Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        android.database.Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        if (cursor == null)
            return;

        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String filePath = cursor.getString(columnIndex);
        cursor.close();

        File file = new File(filePath);

        RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file);
        MultipartBody.Part body = MultipartBody.Part.createFormData("banner", file.getName(), reqFile);
        RequestBody name = RequestBody.create(MediaType.parse("text/plain"), "banner");

        Log.d("THIS", data.getData().getPath());

        retrofit2.Call<okhttp3.ResponseBody> req = service.postImage(body, name);
        req.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.e("FFF", t.getMessage());
                t.printStackTrace();
            }
        });
    }
}

错误堆栈:

Process: com.projectbox.uploadfile, PID: 17822
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:28362 flg=0x1 }} to activity {com.projectbox.uploadfile/com.projectbox.uploadfile.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:4220)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4263)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1601)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Caused by: java.lang.NullPointerException
at java.io.File.<init>(File.java:262)
at com.projectbox.uploadfile.MainActivity.onActivityResult(MainActivity.java:110)
at android.app.Activity.dispatchActivityResult(Activity.java:7025)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4216)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4263) 
at android.app.ActivityThread.-wrap20(ActivityThread.java)                                                                

共有1个答案

祁彬
2023-03-14

文件路径似乎为空。您正在尝试使用纵隔存储data列从content:/URI获取文件。这可能起作用,也可能不起作用,正如Mark Murphy在《如何从URI消费内容》中所解释的那样。

获取内容的唯一可靠方法是使用ContentResolver.OpenInputStream()

然后,您可以在上载该流之前将其复制到文件中,也可以直接上载该流,如本OkHttp制作方法所述。

 类似资料:
  • 我试着让我的相机为我的android应用程序工作,但我一直得到以下错误 02-07 22:30:48.217 131 97-13197/com.example.romsm.lap E/AndroidRuntime:致命异常:main java.lang.RuntimeException:将结果ResultInfo{who=null,request=1,result=-1,data=intent{a

  • 在这个问题上有人能帮我吗? 我在打印logcat。但我不能复制这一期。我的用户很少会遇到这个问题。 这是从我的用户的Logcat值复制的,他使用的是Android版本6.0.1 提前道谢。

  • 我不能成功的屏幕录制,它开始录制ok,但当它停止应用程序崩溃 错误:

  • 背景: 有两项活动 1x(主活动),1x(子活动-具有列表视图的活动) 主活动扩展了碎片活动,信息将在碎片中使用 单击主活动的菜单项时,子活动将打开 为ListView使用HashMap 我的目标: 单击项的HashMap值应发送回主活动,子活动(带有ListView)应关闭 问题: 我认为我犯了一个巨大的错误,但我无法解决它。 从onOptionsItemSelected和onActivityR

  • 问题内容: 我真的很沮丧地解决了我的问题,我有一个使用相机的应用程序,当相机拍摄照片时,它将在活动中显示,当我不使用照片时,将在活动中显示,但是名称和路径文件未显示就像我想要的。我正在使用galaxy选项卡进行编译,我已经按照教程从此处,此处和此处解决了我的问题,但是我的应用程序仍然强制关闭并出错,这是我的代码: 活动结果方法: 这是我的logcat说的: 我真的希望有人可以帮助我解决我的问题,我

  • 我想问一下如何将值从片段a传递到活动B,然后再传递回片段。我尝试使用bundle来传递值,但是它会给出错误的数据。 非常感谢。