0

Malheureusement, j'ai un problème que je ne peux pas résoudre. C'est pourquoi j'ai besoin de votre aide. Lorsqu'un nouvel utilisateur est ajouté et que l'userActivity (KontakteActivity) est ouvert, l'application se bloque parfois. S'il vous plaît laissez-moi savoir si je l'ai oublié quelque chose qui est utile pour la solution du problèmeFirebase Recylerview lève NullPointerException dans populateView

Voici le code du userActivity:

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ProgressBar; 
import android.widget.TextView; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.engine.DiskCacheStrategy; 
import com.firebase.ui.database.FirebaseRecyclerAdapter; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 

public class KontakteActivity extends AppCompatActivity { 

    TextView kontakt_name,kontakt_email; 
    RecyclerView recyclerView; 
    FirebaseDatabase firebaseDatabase; 
    DatabaseReference mDatabaseReference; 
    public FirebaseRecyclerAdapter<FirebaseDB_helper,Kontakte_Viewholder> mFirebaseAdapter; 
    ProgressBar progressBar; 
    LinearLayoutManager linearLayoutManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_kontakte); 


     //DB 
     firebaseDatabase = FirebaseDatabase.getInstance(); 
     mDatabaseReference = firebaseDatabase.getReference("Users"); 
     mDatabaseReference.keepSynced(true); 

     //Views 
     progressBar = (ProgressBar)findViewById(R.id.progressBar_act_kontakte); 

     recyclerView = (RecyclerView)findViewById(R.id.recylerView_kontakte_act_kontakte); 

     linearLayoutManager = new LinearLayoutManager(KontakteActivity.this); 


     recyclerView.setLayoutManager(linearLayoutManager); 
    } 


    @Override 
    protected void onStart() { 
     super.onStart(); 

     progressBar.setVisibility(ProgressBar.VISIBLE); 


     mFirebaseAdapter = new FirebaseRecyclerAdapter<FirebaseDB_helper, Kontakte_Viewholder> 
       (FirebaseDB_helper.class, R.layout.kontakte_card_view, Kontakte_Viewholder.class, mDatabaseReference) { 


      public void populateViewHolder(final Kontakte_Viewholder viewholder , FirebaseDB_helper model, final int position) 
      { 

       progressBar.setVisibility(View.INVISIBLE); 

        viewholder.Kontakt_Name(model.getName()); 
        viewholder.Kontakt_Image(model.getImage_Url()); 
        if (model.getEmail().equals(MainActivity.User_email)) 
        { 
         viewholder.Layout_hide(); 
        }else { 
         viewholder.Kontakt_Email(model.getEmail()); 
        } 

      } 
     }; 

     mFirebaseAdapter.notifyDataSetChanged(); 

     recyclerView.setAdapter(mFirebaseAdapter); 


    } 

// /* 

    public static class Kontakte_Viewholder extends RecyclerView.ViewHolder{ 

     private final TextView kontakt_name,kontakt_email; 
     private final ImageView kontakt_image; 
     private final LinearLayout layout; 
     final LinearLayout.LayoutParams params; 

     public Kontakte_Viewholder(final View itemView) { 
      super(itemView); 

      kontakt_name=(TextView)itemView.findViewById(R.id.txt_name_kontakt_card); 
      kontakt_email=(TextView)itemView.findViewById(R.id.txtView_email_kontakt_card); 
      kontakt_image=(ImageView)itemView.findViewById(R.id.imageView_kontakt_card); 
      layout = (LinearLayout)itemView.findViewById(R.id.linearlayout_kontakt_card_view); //Probleeeeeem 
      params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);//erforderlich um ein LinearLayout anzupassen 
     } 

     private void Kontakt_Name(String name) 
     { 
      kontakt_name.setText(name); 
     } 

     private void Layout_hide() 
     { 
      params.height=0; 
      layout.setLayoutParams(params); 
     } 

     private void Kontakt_Email (String email) 
     { 
      kontakt_email.setText(email); 
     } 

     private void Kontakt_Image (String Url) 
     { 
      if (!Url.equals("Null")){ 
       Glide.with(itemView.getContext()) 
         .load(Url) 
         .crossFade() 
         .thumbnail(0.5f) 
         .placeholder(R.drawable.loading) 
         .diskCacheStrategy(DiskCacheStrategy.ALL) 
         .into(kontakt_image); 
      } 
     } 


    }//*/ 
} 

Voici le rapport du crash d'Android studio

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.zare.ma_firechat, PID: 9510 
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference 
     at com.example.zare.ma_firechat.KontakteActivity$Kontakte_Viewholder.Kontakt_Image(KontakteActivity.java:129) 
     at com.example.zare.ma_firechat.KontakteActivity$Kontakte_Viewholder.access$100(KontakteActivity.java:94) 
     at com.example.zare.ma_firechat.KontakteActivity$1.populateViewHolder(KontakteActivity.java:74) 
     at com.example.zare.ma_firechat.KontakteActivity$1.populateViewHolder(KontakteActivity.java:61) 
     at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:184) 
     at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356) 
     at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389) 
     at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335) 
     at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598) 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440) 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436) 
     at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224) 
     at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551) 
     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) 
     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595) 
     at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) 
     at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3025) 
     at android.view.View.measure(View.java:19734) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 
     at android.view.View.measure(View.java:19734) 
     at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1028) 
     at android.view.View.measure(View.java:19734) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 
     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139) 
     at android.view.View.measure(View.java:19734) 

Image of the View

+0

Il semble qu'un ou plusieurs de vos utilisateurs manquent des propriétés dans la base de données. Aller à la ligne KontakteActivity.java 129 et vous verrez quelle propriété c'est. Si vous exécutez l'application à partir d'Android Studio dans le débogueur, il se cassera même dans cette ligne. Voir https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it –

Répondre

0

Le paramètre d'entrée dans private void Kontakt_Image (String Url) est null. Vous avez besoin d'une vérification nulle.

private void Kontakt_Image (String Url) 
    { 
     if (Url!=null && !Url.equals("Null")){ 
      Glide.with(itemView.getContext()) 
        .load(Url) 
        .crossFade() 
        .thumbnail(0.5f) 
        .placeholder(R.drawable.loading) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .into(kontakt_image); 
     } 
    }