Firebase Recylerview在populateView中抛出NullPointerException

时间:2017-06-09 14:48:33

标签: android firebase firebase-realtime-database android-recyclerview firebaseui

不幸的是我遇到了一个我无法解决的问题。这就是我需要你帮助的原因。添加新用户并打开userActivity(KontakteActivity)后,应用程序有时会崩溃。如果我忘记了对问题解决方案有帮助的事情,请告诉我

以下是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);
            }
        }


    }//*/
}

以下是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

1 个答案:

答案 0 :(得分:0)

private void Kontakt_Image (String Url)中的输入参数为null。 你需要空检查。

    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);
        }
    }
相关问题