2016-09-07 4 views
1

画像をアップロードし、Retrofit 2を使用して投稿方法でStringデータを送信する必要があります。私はそれを行うために流れる方法を使用しています。Retrofit 2.0でファイルと文字列の値を作成中にエラーが発生しました

@Multipart 
@FormUrlEncoded 
@POST("signup/step3") 
Call<BasicModel> completeRegistration(
    /*All Basic Parameter*/ 
    @Field("mobile_no") String mobileNo, 

    /*For User Image*/ 
    @Part MultipartBody.Part photoFile 

); 

ただし、次のエラーが発生しています。

java.lang.IllegalArgumentException: Only one encoding annotation is allowed. 
     for method AllNetworkCalls.completeRegistration 
     at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:695) 
     at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:686) 
     at retrofit2.ServiceMethod$Builder.parseMethodAnnotation(ServiceMethod.java:266) 
     at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:169) 
     at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166) 
     at retrofit2.Retrofit$1.invoke(Retrofit.java:145) 
     at java.lang.reflect.Proxy.invoke(Proxy.java:397) 
     at $Proxy1.completeRegistration(Unknown Source) 
     at com.sslwireless.app.Activities.SignUp.RegistrationActivity_5.completeRegistration(RegistrationActivity_5.java:244) 
     at com.sslwireless.app.Activities.SignUp.RegistrationActivity_5.access$1100(RegistrationActivity_5.java:51) 
     at com.sslwireless.app.Activities.SignUp.RegistrationActivity_5$5.onClick(RegistrationActivity_5.java:132) 
     at android.view.View.performClick(View.java:4856) 
     at android.view.View$PerformClick.run(View.java:19956) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:211) 
     at android.app.ActivityThread.main(ActivityThread.java:5389) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815) 

これ以外の方法はありますか?

+0

私はあなたが同じ要求のために一緒に 'FormUrlEncoded' @と' Multipart' @使用できることと思ういけません。 FromUrlEncodedを削除してみてください。 – MBH

+0

は '@ FromUrlEncoded'を削除して、' @ Field'にエラーが表示されます。 –

+0

私はあなたが '@ Field'の代わりに' @Field'の代わりに '@ Body'を使う必要があると思います。 – MBH

答えて

2

Retrofit 2を使用するには、OkHttpのRequestBodyクラスまたはMultipartBody.Partクラスのいずれかを使用し、ファイルをリクエスト本体にカプセル化する必要があります。ファイルアップロードのインターフェース定義を見てみましょう。

public interface FileUploadService { 
    @Multipart 
    @POST("upload") 
    Call<ResponseBody> upload(@Part("description") RequestBody description, 
           @Part MultipartBody.Part file); 
} 
Javaファイル内

private void uploadFile(Uri fileUri) { 
    // create upload service client 
    FileUploadService service = 
      ServiceGenerator.createService(FileUploadService.class); 

    // https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java 
    // use the FileUtils to get the actual file by uri 
    File file = FileUtils.getFile(this, fileUri); 

    // create RequestBody instance from file 
    RequestBody requestFile = 
      RequestBody.create(MediaType.parse("multipart/form-data"), file); 

    // MultipartBody.Part is used to send also the actual file name 
    MultipartBody.Part body = 
      MultipartBody.Part.createFormData("picture", file.getName(), requestFile); 

    // add another part within the multipart request 
    String descriptionString = "hello, this is description speaking"; 
    RequestBody description = 
      RequestBody.create(
        MediaType.parse("multipart/form-data"), descriptionString); 

    // finally, execute the request 
    Call<ResponseBody> call = service.upload(description, body); 
    call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, 
           Response<ResponseBody> response) { 
      Log.v("Upload", "success"); 
     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      Log.e("Upload error:", t.getMessage()); 
     } 
    }); 
} 
+0

'RequestBody'のパラメータを共有できますか? –

+0

それは働いた。ありがとう。 :) –

関連する問題