[英]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.