我正在使用Retrofit 2.I’am尝试实现“PATCH”方法来更新主线程上的个人资料照片.我也试过Postman.I可以更新个人资料照片.
这是我使用调用时的界面.另外,UpdateUser是模型w
@PATCH("user/{username}/")
Call<User> updateUserProfile(@Path("username") String username, @Body UpdateUser User);
这是我的用户模型
public class User {
@SerializedName("username")
@Expose
private String username;
@SerializedName("first_name")
@Expose
private String firstName;
@SerializedName("last_name")
@Expose
private String lastName;
@SerializedName("profile_photo")
@Expose
private String profilePhoto;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getProfilePhoto() {
return profilePhoto;
}
public void setProfilePhoto(String profilePhoto) {
this.profilePhoto = profilePhoto;
}
这是我在我处理请求的ProfileUpdatePresenter
public class ProfileUpdatePresenter
{
private ProfileUpdateView profileView;
private ApiInterface apiInterface =
MyAPIClient.getClient().create(ApiInterface.class);
public ProfileUpdatePresenter(ProfileUpdateView profileView) {
this.profileView = profileView;
}
我得到了这个方法的用户
public void getUserProfile(Activity activity, String username) {
apiInterface.getUserProfile(username).enqueue(new CustomCallBack<User>(activity) {
@Override
public void onResponse(@NonNull Call<User> call, @NonNull Response<User> response) {
super.onResponse(call,response);
if(response.isSuccessful()) {
profileView.onProfileGet(response.body());
}
}
@Override
public void onFailure(@NonNull Call<User> call, @NonNull Throwable t) {
super.onFailure(call,t);
}
});
}
我在这里更新用户
public void updateUserProfile(Activity activity, String Username, UpdateUser User){
apiInterface.updateUserProfile(Username,User).enqueue(new CustomCallBack<User>(activity) {
@Override
public void onResponse(@NonNull Call<User> call, @NonNull Response<User> response) {
super.onResponse(call,response);
if(response.isSuccessful()) {
profileView.onUpdateSucceed(response.body());
}
}
@Override
public void onFailure(@NonNull Call<User> call, @NonNull Throwable t) {
super.onFailure(call,t);
}
});
在我的UpdateProfile Activity.I通过实现我的演示者的方法得到用户.然后我也在这里更新.但我很困惑如何在这里更新我的个人资料照片.
@Override
public void onProfileGet(@NotNull User user) {
UserProfile = user;
if(UserProfile.getFirstName() != null)
et_name.setText(UserProfile.getFirstName());
if(UserProfile.getLastName() != null)
et_surname.setText(UserProfile.getLastName());
if(UserProfile.getPhone() != null)
}
我还使用接口来实现我在主线程上使用的方法
public interface ProfileUpdateView {
void onProfileGet(@NotNull User user);
void onUpdateSucceed(@NotNull User user);
}
说实话我的主要问题是如何使用我的旧@PATCH来更新个人资料照片.基本上如何在一个电话上结合这些?
@PATCH("user/{username}/")
Call<User> updateUserProfile(@Path("username") String username, @Body UpdateUser User);
+
@Multipart
@PATCH("/retrofit_tutorial/retrofit_client.php")
Call<ServerResponse> uploadFile(@Part MultipartBody.Part file, @Part("file") RequestBody name);
解决方法:
如果您可以将服务器的API修改为@POST Multipart,那么您可以执行以下操作:
@Multipart
@POST("user/{username}/")
Call<User> updateUserProfile(
@Path("username") String username,
@Part MultipartBody.Part photo,
@Part("json_user") String jsonUser
);
// Some Utils for request
public MultipartBody.Part fileToPart(File file) {
return MultipartBody.Part.createFormData(
"photo", // param name
file.getName(),
RequestBody.create(MediaType.parse("image/*"), file)
);
}
// usage
updateUserProfile("Dude", fileToPart(myFile), new Gson().toJson(myUpdateUser))