Попытка вызвать виртуальный метод void de.hdodenhof.circleimageview.CircleImageView.setOnClickListener ... 'для ссылки на пустой объект - PullRequest
0 голосов
/ 14 апреля 2020

Я написал строки кода из моего предыдущего проекта, который загружает галерею при нажатии на изображение профиля. Я скопировал и вставил код из этого проекта сюда, чтобы внести соответствующие изменения, ожидая работоспособности (поскольку он отлично работает в другом приложении). Но я получаю исключение Null Pointer.

Attempt to invoke virtual method 'void de.hdodenhof.circleimageview.CircleImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.kujinn.meetup.Settings.onCreateView(Settings.java:78)

Я пытался увидеть, случайно ли я использовал один и тот же идентификатор дважды, или я использовал неправильный вид, но ничего не казалось неуместным.

Java Код:

   private CircleImageView profileImage
   profileImage = (CircleImageView) getActivity().findViewById(R.id.edit_profile_image);
   profileImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //If version is greater than Marshmallow, User Permissions in required
                if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){

                    //Display message that user has denied permission
                    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){

                        Toast.makeText(getActivity(), "Permission Denied.", Toast.LENGTH_LONG).show();
                        ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);

                    } else{

                        CropImage.activity()
                                .setGuidelines(CropImageView.Guidelines.ON)
                                .setAspectRatio(1,1)
                                .start(getActivity());
                    }
                }

            }
        });

XML Код

 <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/edit_profile_image"
        android:layout_width="184dp"
        android:layout_height="177dp"
        android:layout_marginTop="64dp"
        android:src="@drawable/ic_person_black_24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/edit_profile_toolbar">

 </de.hdodenhof.circleimageview.CircleImageView>

Any help would be greatly appreciated ~


Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Я бы предложил вам использовать viewBinding, чтобы избежать нулевой ссылки: ссылка на видео находится ниже и не спонсируется. На самом деле привязка View - это функция, которая позволяет вам легче писать код, взаимодействующий с представлениями. Как только привязка вида включена в модуле, он генерирует класс привязки для каждого файла макета XML, присутствующего в этом модуле. Экземпляр класса привязки содержит прямые ссылки на все представления, имеющие идентификатор в соответствующем макете. В большинстве случаев привязка к представлению заменяет findViewById.

Привязка к просмотру имеет важные преимущества по сравнению с использованием findViewById: Ссылка на видео

0 голосов
/ 14 апреля 2020

В подобных ситуациях может быть два сценария ios. Либо вы создаете экземпляр CircleImageView перед настройкой представления содержимого, либо неправильно создаете экземпляр CircleImageView. Убедитесь, что ваш 'setContentView (R.layout.activity_layout)' перед тем, как назначить profileImage. Исключение нулевого указателя буквально означает, что родительский макет не был установлен, и все же вы вызываете компонент для него. Это определенно будет указывать на ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...