Android 无法在回收器视图中显示firebase数据
这是一个简单的客户查询聊天应用程序。我能够在firebase中插入数据,并通过解析tsp页面获得所需数据(这是一种临时安排,有人正在制作一个将返回json数据的api)。我无法在“回收器”视图中显示我的firebase数据。我可以在数据库中插入数据。在屏幕上只显示null/0/0 以下是我的活动代码:Android 无法在回收器视图中显示firebase数据,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,这是一个简单的客户查询聊天应用程序。我能够在firebase中插入数据,并通过解析tsp页面获得所需数据(这是一种临时安排,有人正在制作一个将返回json数据的api)。我无法在“回收器”视图中显示我的firebase数据。我可以在数据库中插入数据。在屏幕上只显示null/0/0 以下是我的活动代码: public class VD extends AppCompatActivity { private EditText ed; private String content;
public class VD extends AppCompatActivity {
private EditText ed;
private String content;
private RecyclerView recyclerView;
String chatId;
DatabaseReference myRef;
private FirebaseDatabase database;
private final List<Messages> mList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vd);
ed = findViewById(R.id.editText);
//gets you the contents of edit text
//
database = FirebaseDatabase.getInstance();
/*myRef = database.getReference("message");
myRef.setValue("Hello vcbv World!");*/
}
@Override
protected void onPause() {
super.onPause();
database.getReference("onlineStatus").child("status").setValue("n");
}
@Override
protected void onResume() {
super.onResume();
database.getReference("onlineStatus").child("status").setValue("y");
}
public void updateDatabase(View view) {
content = ed.getText().toString();
//Log.d("vidhu",content);
String[] cd = content.split("/");
final String caseType = cd[0];
final int caseNumber = Integer.parseInt(cd[1]);
final int caseYear = Integer.parseInt(cd[2]);
myRef = database.getReference("case_details");
chatId = myRef.push().getKey();
CaseDetails caseDetails = new CaseDetails(caseType, caseNumber, caseYear);
myRef.child(chatId).setValue(caseDetails);
myRef.child(chatId).child("status").setValue("");
VD.JsoupAsyncTask jsoupAsyncTask = new VD.JsoupAsyncTask();
jsoupAsyncTask.execute();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Messages a = dataSnapshot.getValue(Messages.class);
mList.add(a);
}
recyclerView = findViewById(R.id.recycler_view);
MessagePopulator mAdapter = new MessagePopulator(mList);
recyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
/*myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ed.setText("");
}
}
}
公共类活动{
私人编辑文本;
私有字符串内容;
私人回收站;
字符串chatId;
数据库参考myRef;
私有FirebaseDatabase数据库;
private final List mList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\U vd);
ed=findViewById(R.id.editText);
//获取编辑文本的内容
//
database=FirebaseDatabase.getInstance();
/*myRef=database.getReference(“消息”);
myRef.setValue(“你好,vcbv世界!”)*/
}
@凌驾
受保护的void onPause(){
super.onPause();
database.getReference(“onlineStatus”).child(“status”).setValue(“n”);
}
@凌驾
受保护的void onResume(){
super.onResume();
database.getReference(“onlineStatus”).child(“status”).setValue(“y”);
}
公共void updateDatabase(视图){
content=ed.getText().toString();
//Log.d(“vidhu”,内容);
字符串[]cd=content.split(“/”);
最终字符串caseType=cd[0];
final int caseNumber=Integer.parseInt(cd[1]);
final int caseYear=Integer.parseInt(cd[2]);
myRef=database.getReference(“案例详细信息”);
chatId=myRef.push().getKey();
案例详情案例详情=新案例详情(案例类型、案例编号、案例年份);
myRef.child(chatId.setValue)(案例详细信息);
myRef.child(chatId.child(“状态”).setValue(“”);
VD.jsoupsynctask jsoupsynctask=新建VD.jsoupsynctask();
jsoupAsyncTask.execute();
myRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
Messages a=dataSnapshot.getValue(Messages.class);
mList.添加(a);
}
recyclerView=findViewById(R.id.recycler\u视图);
MessagePopulator mAdapter=新的MessagePopulator(mList);
recyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
RecyclerView.LayoutManager mLayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
/*myRef.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
ed.setText(“”);
}
}
}
下面是我的适配器类
public class MessagePopulator extends RecyclerView.Adapter<MessagePopulator.MyViewHolder> {
private List<Messages> messageList;
public MessagePopulator(List<Messages> mList) {
this.messageList = mList;
}
public List<Messages> getMessageList() {
return messageList;
}
public void setMessageList(List<Messages> messageList) {
this.messageList = messageList;
}
/*public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.messageslist, parent, false);
return new MyViewHolder(itemView);
//return null;
}*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.messageslist, parent, false);
return new MyViewHolder(itemView);
//return null;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
//System.out.println("position is "+ position);
Messages msgs = messageList.get(position);
//System.out.println("vidhu data "+msgs.getCaseType()+"/"+msgs.getCaseNumber()+"/"+msgs.getCaseYear());
holder.caseDetail.setText(msgs.getCaseType()+"/"+msgs.getCaseNumber()+"/"+msgs.getCaseYear());
holder.caseStatus.setText(msgs.getStatus());
}
@Override
public int getItemCount() {
return messageList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView caseDetail, caseStatus;
public MyViewHolder(View view) {
super(view);
caseDetail = (TextView) view.findViewById(R.id.tvCaseDetail);
caseStatus = (TextView) view.findViewById(R.id.tvStatus);
}
}
}
公共类MessagePopulator扩展了RecyclerView.Adapter{
私有列表消息列表;
公共消息填充器(列表mList){
this.messageList=mList;
}
公共列表getMessageList(){
返回消息列表;
}
公共无效设置消息列表(列表消息列表){
this.messageList=messageList;
}
/*公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())。
充气(R.layout.messages列表,父项,false);
返回新的MyViewHolder(itemView);
//返回null;
}*/
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())。
充气(R.layout.messages列表,父项,false);
返回新的MyViewHolder(itemView);
//返回null;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
//系统输出打印项次(“位置为”+位置);
Messages msgs=messageList.get(位置);
//System.out.println(“vidhu数据”+msgs.getCaseType()+“/”+msgs.getCaseNumber()+“/”+msgs.getCaseYear());
holder.caseDetail.setText(msgs.getCaseType()+“/”+msgs.getCaseNumber()+“/”+msgs.getCaseYear());
holder.caseStatus.setText(msgs.getStatus());
}
@凌驾
public int getItemCount(){
返回messageList.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共文本查看案例详情、案例状态;
公共MyViewHolder(视图){
超级(视图);
caseDetail=(TextView)view.findViewById(R.id.tvCaseDetail);
caseStatus=(TextView)view.findViewById(R.id.tvStatus);
}
}
}
只需使用官方提供的FirebaseRecyclerAdapter即可 以下是官方文档中的示例代码:
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Chat, ChatHolder>(options) {
@Override
public ChatHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new instance of the ViewHolder, in this case we are using a custom
// layout called R.layout.message for each item
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.message, parent, false);
return new ChatHolder(view);
}
@Override
protected void onBindViewHolder(ChatHolder holder, int position, Chat model) {
// Bind the Chat object to the ChatHolder
// ...
}
};
FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(选项){
@凌驾
public ChatHolder onCreateViewHolder(视图组父级,int-viewType){
//创建ViewHolder的新实例,在本例中,我们使用自定义
//为每个项目调用R.layout.message的布局
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.message,父项,false);
返回新的聊天室持有者(视图);
}
@凌驾
受保护的void onBindViewHolder(聊天室支架、int位置、聊天室型号){
//将聊天对象绑定到ChatHolder
// ...
}
};