gpt4 book ai didi

android - 改造 - 抛出异常 java.lang.IllegalArgumentException : Only one encoding annotation is allowed

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:16 33 4
gpt4 key购买 nike

大家好,这是我的示例代码

@FormUrlEncoded
@Multipart
@POST("registration.php")
Call<Signup> getSignupResponse(@Field("email") String email,
@Field("lname") String lname,
@Field("fname") String fname,
@Field("password") String password,
@Part("filename") File file);

问题是,当我尝试将文件参数添加为一个部分时,如果我只使用@Field,它会向我抛出一个错误,它工作得很好,但在我向其中添加@Part 后却无法工作
- 有没有办法在 Retrofit 中同时使用@Field 和@part?
- 如果是,请告诉我原因,如果不是,请告诉我正确的方法

非常感谢您的回答,并提前感谢您

注意:投票前请在评论中告诉我建议。

最佳答案

You cannot use both @FormUrlEncoded and @Multipart on a single method. An HTTP request can only have one Content-Type and both of those are content types.

@FormUrlEncoded (for android) | application/x-www-form-urlencoded(for web)

@Multipart (for android) | multipart/form-data(for web)

像这样使用......

  @Multipart
@POST("photos/upload")
Call<Result> upload(@Part("Token") RequestBody token, @Part("Photo_Type") RequestBody type, @Part MultipartBody.Part file );

然后像这样通话......

String token="your string";

File file = new File(path);
RequestBody tokenRequest = RequestBody.create(MediaType.parse("text/plain"), token);
RequestBody type = RequestBody.create(MediaType.parse("text/plain"), true + "");

MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file));



Call<Result> call = qikGrubApi.upload(tokenRequest, type, filePart);

call.enqueue(new Callback<Result>() {
@Override
public void onResponse(Call<Result> call, Response<Result> response) {
progress.dismiss();
if (response.isSuccessful()) {
if (response.body().getSuccess()) {
nextPage(response.body().getMessage());
} else
Toast.makeText(UploadActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(UploadActivity.this, "Sorry for inconvince server is down", Toast.LENGTH_SHORT).show();
}
}

@Override
public void onFailure(Call<Result> call, Throwable t) {
progress.dismiss();
Toast.makeText(UploadActivity.this, "Check your Internet connection", Toast.LENGTH_SHORT).show();
}
});
}

注意:- 将上面的示例用于您的文件 POST,如果您卡在任何地方,请告诉我。

有关详细信息,请单击 this

编辑:-

对于你的情况,像这样使用......

    @Multipart
@POST("registration.php")
Call<Signup> getSignupResponse(@Part("email") RequestBody email,
@Part("lname") RequestBody lname,
@Part("fname") RequestBody fname,
@Part("password") RequestBody password,
@Part MultipartBody.Part filename);

并像这样使用改造调用......

 File file = new File(path);
RequestBody emailRequest = RequestBody.create(MediaType.parse("text/plain"), email);
RequestBody lnameRequest = RequestBody.create(MediaType.parse("text/plain"), lname);
RequestBody fnameRequest = RequestBody.create(MediaType.parse("text/plain"), fname);
RequestBody passwordRequest = RequestBody.create(MediaType.parse("text/plain"), password);

MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file));



Call<Signup> call = qikGrubApi.upload(emailRequest, lnameRequest ,fnameRequest , passwordRequest, filePart);

call.enqueue(new Callback<Signup>() {
@Override
public void onResponse(Call<Signup> call, Response<Signup> response) {
progress.dismiss();
if (response.isSuccessful()) {
if (response.body().getSuccess()) {
nextPage(response.body().getMessage());
} else
Toast.makeText(UploadActivity.this, response.body().getMessage(), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(UploadActivity.this, "Sorry for inconvince server is down", Toast.LENGTH_SHORT).show();
}
}

@Override
public void onFailure(Call<Signup> call, Throwable t) {
progress.dismiss();
Toast.makeText(UploadActivity.this, "Check your Internet connection", Toast.LENGTH_SHORT).show();
}
});
}

Example

关于android - 改造 - 抛出异常 java.lang.IllegalArgumentException : Only one encoding annotation is allowed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607862/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com