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)
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 –