2017-09-09 21 views
0

私はアンドロイドライブラリを作成し、機器テストを使用してユニットテストを行っています。Android Retrofit 2.0はMultipartBody.Parメソッドを使用して画像、ビデオ、オーディオをアップロードします

これは私のコードは、(コントローラクラス)

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"/> 

しかし、解決策ではありません。結果は同じです。

この問題をどうぞご覧ください。私はこの問題で完全にブロックしました。

答えて

0

私は解決策を見つけました。これは、マシュマロのバージョンのために発生します。バージョン23以降では、Androidデバイスからファイルを読み込むためには、実行時のアクセス権が必要です。

私がJelly Beanを搭載したデバイスで試したところ、コードはうまく動作しています。

とにかく、この問題のバージョンを確認するには、この解決策に従うことができます。Storage permission error in Marshmallow

関連する問題