简体   繁体   English

应用程序不会在 recyclerview 中显示来自 firebase 的数据

[英]App doesn't show data from firebase in recyclerview

I am facing some problems in retrieving data from firebase realtime database on to my recycler view.我在从 firebase 实时数据库检索数据到我的回收站视图时遇到了一些问题。 When i add this line to my code当我将此行添加到我的代码时

  holder.textView.setText(user.getName()+"   | "+user.getAge());

it shows me this error in Logcat window它在 Logcat 窗口中向我显示了这个错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.shivam.fireapp.mModelAdapter.onBindViewHolder(mModelAdapter.java:41)

but when i omit the line recyclerview simply shows be empty textviews in place of my data on firebase.但是当我省略行 recyclerview 只是显示为空文本视图代替我在 firebase 上的数据。

My full code我的完整代码

MainActivity.java主活动.java

    public class MainActivity extends AppCompatActivity {
    private  Button button;
    private  Button button2;
    EditText editText;
    EditText editText2;
    String TAG ="MyTag";
    private FirebaseDatabase mRootRef;
    private DatabaseReference mRefMain;
    private ChildEventListener mchildeventlistener;
    private RecyclerView mRecyclerView;
    private mModelAdapter modelAdapter;
    private List<User> mDataList;

    //DatabaseReference mRootRef= FirebaseDatabase.getInstance().getReference();
    //DatabaseReference mRefMain =mRootRef.child("Users");
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.Senddata);
        button2 = (Button) findViewById((R.id.GetData));
        editText = (EditText) findViewById(R.id.Firstname);
        editText2 = (EditText) findViewById(R.id.Agee);
        mRecyclerView = findViewById(R.id.recyclerView);


        mRootRef = FirebaseDatabase.getInstance();
        mRefMain = mRootRef.getReference("Users");

        mDataList = new ArrayList<>();

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        modelAdapter = new mModelAdapter(MainActivity.this, mDataList);
        mRecyclerView.setAdapter(modelAdapter);



    }

    @Override
    protected void onStart() {
        super.onStart();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name = editText.getText().toString();
                 String age = editText2.getText().toString();

                User user = new User(name,age);

                String key = mRefMain.push().getKey();
                mRefMain.child(key).setValue(user);

                Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show();
            }
        });


        mchildeventlistener = new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                User user = dataSnapshot.getValue(User.class);
                mDataList.add(user);
                modelAdapter.notifyDataSetChanged();
                //modelAdapter = new mModelAdapter(MainActivity.this,mDataList); //this will recreate the adapter with new data
                //RecyclerView.setAdapter(modelAdapter); //Again set adapter to recyclerview

                Log.d(TAG, "OnChildAdded : Name    " + user.getName());
                Log.d(TAG, "OnChildAdded : age    " + user.getAge());


            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

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

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

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

            }
        };




        mRefMain.addChildEventListener(mchildeventlistener);



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



    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        mRefMain.removeEventListener(mchildeventlistener);
    }


}

mModelAdapter.java模型适配器.java

    public class mModelAdapter extends RecyclerView.Adapter<mModelAdapter.MyViewHolder> {
    private Context context;
    private List<User> mDataList;

    public mModelAdapter(Context context, List<User> mDataList) {
        this.context = context;
        this.mDataList = mDataList;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View rootView= LayoutInflater.from(context).inflate(R.layout.recycler_view_item,parent,false);

        return new MyViewHolder(rootView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        User user = mDataList.get(position);

       holder.textView.setText(user.getName()+"   | "+user.getAge());



    }

    @Override
    public int getItemCount() {
        return mDataList.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{
        TextView textView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewWithTag(R.id.textView);
        }
    }
}

recycler_view_item.xml recycler_view_item.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="TextView"
        android:textSize="24sp"
        android:gravity="center"/>
</LinearLayout>

User.java用户.java

    public class User {

    String name;
    String age;

    public User() {

    }

    public User(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

Change this-:改变这个-:

textView = itemView.findViewWithTag(R.id.textView);

to-:到-:

textView = itemView.findViewById(R.id.textView);

as textview is unable to find id因为 textview 无法找到 id

Change this改变这个

textView = itemView.findViewWithTag(R.id.textView);

to

textView = itemView.findViewById(R.id.textView);

似乎 user.getName() 或 user.getAge() 为空,这是您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM