У меня есть этот фрагмент UserProfileFragment. java, Здесь у меня есть форма с некоторыми полями, также с одним профилем пользователя Image-view, где пользователь загружает свое изображение, сначала все работает нормально, но когда пользователь хочет обновить детали после получение данных с сервера, а также получение и установка миниатюры изображения в режиме просмотра изображений. Здесь, когда пользователь обновляет детали без изменения текущего изображения профиля в режиме просмотра изображений, приложение вылетает с ошибкой, как показано ниже:
FATAL EXCEPTION: main
Process: com.***.******, PID: 16313
java.lang.NullPointerException
at java.io.File.<init>(File.java:283)
at com.***.*****.fragment.UserProfileFragment.Updatemyprofile(UserProfileFragment.java:576)
at com.***.*****.fragment.UserProfileFragment.onClick(UserProfileFragment.java:343)
Когда пользователь меняет изображение профиля, приложение не треснет sh во время обновления.
Мой метод обновления пользователя выглядит следующим образом:
private void Updatemyprofile() {
//pass it like this
File file = new File(picturePath);
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("image", file.getName(), requestFile);
// add another part within the multipart request
RequestBody userid = RequestBody.create(MediaType.parse("multipart/form-data"), Constant.Userid);
RequestBody role = RequestBody.create(MediaType.parse("multipart/form-data"), Constant.Role);
RequestBody name = RequestBody.create(MediaType.parse("multipart/form-data"), edtfullName.getText().toString().trim());
RequestBody pincode = RequestBody.create(MediaType.parse("multipart/form-data"), edtpincode.getText().toString().trim());
RequestBody address = RequestBody.create(MediaType.parse("multipart/form-data"), edtaddress.getText().toString().trim());
RequestBody gender = RequestBody.create(MediaType.parse("multipart/form-data"), Gender);
RequestBody dob = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(epoch));
apiInterface = RetrofitApiUtils.getAPIService();
apiInterface.Updatemyprofile(Constant.AccessToken, userid, role, name, pincode, address, gender, dob, body ).enqueue(new Callback<UpdateUserProf>() {
@Override
public void onResponse(@NonNull Call<UpdateUserProf> call, @NonNull Response<UpdateUserProf> response) {
try {
if (response.isSuccessful()) {
if (response.body() != null && response.body().getStatus().equals(true)) {
Toast.makeText(getActivity(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
UpdateUserProfData updateUserProfData = response.body().getData();
Log.d("Results ==>>...1", new GsonBuilder().setPrettyPrinting().create().toJson(updateUserProfData));
myprofile(Constant.Userid, Constant.Role);
} else {
Toast.makeText(getActivity(), response.body().getMessage(), Toast.LENGTH_SHORT).show();
}
} else {
CallingToastMethod.showToast(getActivity());
}
} catch (Exception e) {
try {
throw new IOException(e.toString());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
@Override
public void onFailure(Call<UpdateUserProf> call, Throwable t) {
Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
Также я пробовал это метод проверки изображения:
if (imgprofile.getDrawable() == null){
Toast.makeText(getActivity(), "Please select Image", Toast.LENGTH_SHORT).show();
}
Он работает, когда пользователь вводит свои данные в первый раз, но не работает над его обновлением.
Мой метод класса интерфейса выглядит следующим образом:
// Update My Profile
@Multipart
@POST("updatemyprofile.php")
Call<UpdateUserProf> Updatemyprofile(@Header("Authorization") String authkey,
@Part("id") RequestBody id,
@Part("role") RequestBody role,
@Part("name") RequestBody name,
@Part("pincode") RequestBody pincode,
@Part("address") RequestBody address,
@Part("gender") RequestBody gender,
@Part("dob") RequestBody dob,
@Part MultipartBody.Part image);
Подскажите, пожалуйста, как это сделать. Я застрял на этом несколько дней и не знаю, как это сделать ... Спасибо! Будьте осторожны ..