大家好,这是我的示例代码
@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);
Run Code Online (Sandbox Code Playgroud)
问题是当我试图将文件参数作为一个零件添加时,如果我只使用@Field它会给我带来错误,但是它很好但是在我添加@Part之后无法工作
- 是否有一种方法无法使用@Field和@part在Retrofit?
- 如果是,则告诉理由,如果没有告诉我正确的方法
我将非常感谢您的回答,并提前感谢您
注意:投票前请在评论中告诉我一些建议.
sus*_*dlh 18
您不能在单个方法上同时使用@FormUrlEncoded和@Multipart.HTTP请求只能有一个Content-Type,而且这两个都是内容类型.
@FormUrlEncoded (for android)| application/x-www-form-urlencoded(for web)
@Multipart(for android)| multipart/form-data(用于web)
像这样使用.....
@Multipart
@POST("photos/upload")
Call<Result> upload(@Part("Token") RequestBody token, @Part("Photo_Type") RequestBody type, @Part MultipartBody.Part file );
Run Code Online (Sandbox Code Playgroud)
和这样的电话......
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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
注意: - 使用上面的示例进行文件POST,如果你卡在任何地方,请告诉我.
有关详细信息,请单击此处
编辑:-
对于你的情况使用这样.....
@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);
Run Code Online (Sandbox Code Playgroud)
并使用像这样的改装电话.....
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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6450 次 |
| 最近记录: |