0

unfortunately I have a problem which I can not solve. That's why I need your help. When a new user is added and the userActivity (KontakteActivity ) is open, the app crashes sometimes. Please let me know if I have forgotten something that is helpful for the problem solution

Here is the code of the 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);
            }
        }


    }//*/
}

Here is the crash report of 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

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Froca
  • 1
  • It looks like one or more of your users is missing some properties in the database. Go to KontakteActivity.java line 129 and you will see what property it is. If you run the app from Android Studio in the debugger, it will even break in that line. See https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it – Frank van Puffelen Jun 09 '17 at 15:01

1 Answers1

0

Input param in private void Kontakt_Image (String Url) is null. You need null checking.

    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);
        }
    }
coder
  • 3,195
  • 2
  • 19
  • 28