Получение ошибки при обновлении деталей, если пользователь не обновляет изображение в Android Studio - PullRequest
1 голос
/ 28 мая 2020

У меня есть этот фрагмент 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);

Подскажите, пожалуйста, как это сделать. Я застрял на этом несколько дней и не знаю, как это сделать ... Спасибо! Будьте осторожны ..

1 Ответ

0 голосов
/ 28 мая 2020

Может быть ваш путь к картинке не найден

Попробуйте внутри если условие :

if(picturePath != null){
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);
}```
...