getContext () возвращает значение null во фрагменте.Вид кажется непривязанным - PullRequest
0 голосов
/ 20 января 2019

Glide.with((getContext())).load(user.getImgURl()).into(image_profile);

Приведенная выше строка возвращает getContext как ноль, что позволяет приложению аварийно завершить работу. Я добавил это во фрагмент под методом onDataChange следующим образом.

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view=inflater.inflate(R.layout.fragment_profile, container, false);

    image_profile=view.findViewById(R.id.profile_image);
    username=view.findViewById(R.id.username);


    storageReference=FirebaseStorage.getInstance().getReference("uploads");

    fuser=FirebaseAuth.getInstance().getCurrentUser();
    reference=FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());




    reference.addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            User user= dataSnapshot.getValue(User.class);
            username.setText(user.getUsername());

            if(user.getImgURl()!= null && user.getImgURl().equals("default")){
                image_profile.setImageResource(R.mipmap.ic_launcher);
            }else{

            Glide.with((getContext())).load(user.getImgURl()).into(image_profile);

            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });



    image_profile.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openImage();
        }
    });


    return view;
}

Код должен извлекать изображение из хранилища Firebase и отображать его в image_profile.

Ниже приводится logcat для ошибки:

java.lang.NullPointerException: 

Вы не можете начать загрузку еще не прикрепленного просмотра или фрагмента, где getActivity () возвращает значение null (что обычно происходит при вызове getActivity () перед присоединением фрагмента или после уничтожения фрагмента).

        at com.bumptech.glide.util.Preconditions.checkNotNull(Preconditions.java:31)
        at com.bumptech.glide.Glide.getRetriever(Glide.java:675)
        at com.bumptech.glide.Glide.with(Glide.java:707)
        at com.hello.khushboo.messaging.Fragments.ProfileFragment$1.onDataChange(ProfileFragment.java:110)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.5:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.5:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.5:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Любая помощь приветствуется. Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 20 января 2019

Вместо использования getContext.Попробуйте использовать getActivity.Работает все время для меня.Поместив это в код, мы имеем:

Glide.with((getActivity())).load(user.getImgURl()).into(image_profile);

Подробнее

Это отношение между действием и контекстом:

  ↳ android.content.Context
      ↳ android.content.ContextWrapper
          ↳ android.view.ContextThemeWrapper
              ↳ android.app.Activity

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

Надеюсь, это поможет.Веселое кодирование.

0 голосов
/ 20 января 2019

во фрагменте используйте getActivity () для контекста, подобного этому: ниже код:

 Glide.with(getActivity())
            .load(imageUri)
            .into(imageview);
0 голосов
/ 20 января 2019
If(isAdded()) {
   Glide.with((getActivity().getContext())).load(user.getImgURl()).into(image_profile)
}

Надеюсь, это поможет.

0 голосов
/ 20 января 2019

Я надеюсь, что это работает.

 Glide.with(view.getContext()).load(user.getImgURl()).into(image_profile);
0 голосов
/ 20 января 2019

Просто добавьте чек к нулю

if (getContext() != null) {
    Glide.with((getContext())).load(user.getImgURl()).into(image_profile);
}

И удалите прослушиватель Firebase в onDestroyView () или onDestroy ():

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