【问题标题】:Android Retrofit 2.0 use image, video and audio uploading with MultipartBody.Par methodAndroid Retrofit 2.0 使用 MultipartBody.Par 方法上传图片、视频和音频
【发布时间】:2017-09-09 09:21:20
【问题描述】:

我正在创建一个 android 库并使用仪器测试进行单元测试。我使用的是 Android Studio 3.0。

这是我的代码(控制器类)

File file = new File("/storage/emulated/0/DCIM/Facebook/FB_IMG_1496146656900.jpg");

RequestBody reqFile = RequestBody.create(MediaType.parse("image/jpeg"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), reqFile);
RequestBody name = RequestBody.create(MediaType.parse("text/plain"), noteId);
String notebookId = getNotebookId(projectId);
if (isSessionAvailable(notebookId)) {
    String session = getNotebookSession(notebookId);
    Call<ResponseBody> call = mApiNotes.requestNotesAttachments(session, name, body);
    call.enqueue(new NoteAttachmentCallBacks.AddNoteAttachmentCallback(assetUploadCallbacks));
}

而且改造界面是

@Multipart
@POST("/NotebookAsset")
Call<ResponseBody> requestNotesAttachments(@Header("Cookie") String notebookSession, @Part("note_id") RequestBody noteId, @Part MultipartBody.Part image);

但是当我运行代码时,这不起作用。调用改造接口类后,测试只是浏览,甚至没有结束。它不断运行测试,但永远不会结束。似乎资产没有上传。

我大概认为,
访问设备中资源的权限存在问题。所以我添加了清单文件的权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

但这不是解决方案。结果是一样的。

你能看看这个问题吗?我已经完全阻止了这个问题。

【问题讨论】:

    标签: android unit-testing file-upload retrofit2


    【解决方案1】:

    好的,我找到了解决方案。这是因为 Marshmallows 版本。版本 23 以后从 Android 设备读取文件,需要运行时权限。

    当我尝试使用带有 Jelly Bean 的设备时,代码运行良好。

    无论如何,要检查这个问题的版本,我们可以按照这个解决方案Storage permission error in Marshmallow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2010-12-10
      • 1970-01-01
      • 2016-04-25
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多