【发布时间】:2018-01-28 18:42:23
【问题描述】:
我创建了一个自定义列表视图和一个自定义适配器。我想从 firebase 加载数据,但我不知道怎么做。我已经浏览了很多帖子,但它对我没有帮助。我需要有人带我过去。
我需要有人告诉我如何检索数据;
数据模型:
public class MessagesListDataModel {
private String uid;
private String msg;
public MessagesListDataModel(){
}
public MessagesListDataModel(String UID, String Message){
this.uid = UID;
this.uid = Message;
}//instance of datamodel
public String getUID(){
return uid;
}
public String getMessage(){
return msg;
}
}
自定义适配器:
public class MessagesListAdapter extends ArrayAdapter<MessagesListDataModel> {
private ArrayList<MessagesListDataModel> dataModels;
public MessagesListAdapter(Context context, int resource, ArrayList<MessagesListDataModel> dataModels){
super(context, resource, dataModels);
this.dataModels = dataModels;
}
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.chat_messages_layout, null);
}
MessagesListDataModel MessagesListDataModel = dataModels.get(position);
if (MessagesListDataModel != null) {
// These TextViews are created in the XML files defined.
TextView uid = (TextView) v.findViewById(R.id.textViewMessage);
TextView message = (TextView) v.findViewById(R.id.textViewUserID);
// check to see if each individual textview is null.
// if not, assign some text!
if (uid != null){
uid.setText(MessagesListDataModel.getUID());
}
if (message != null){
message.setText(MessagesListDataModel.getMessage());
}
}
// the view must be returned to our activity
return v;
}
}
在主要:
chatroomsref = FirebaseDatabase.getInstance().getReference("Chatrooms");
///////
ListViewMessages = (ListView) findViewById(R.id.chatRoomMessagesListview);
ArrayAdapter<MessagesListAdapter> arrayAdapter = new ArrayAdapter<MessagesListAdapter>(this, R.layout.chat_messages_layout,messages);
ListViewMessages.setAdapter(arrayAdapter);
chatroomsref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
获取数据:
我需要知道如何获取数据,以便它遍历所有具有唯一 ID 的聊天室,然后他们从数据库中获取该数据并将其分配给这些文本视图并显示数据,以便我可以在其中运行此功能数据库参考。但我不知道怎么做?
所以我在 main 中所做的是:
room_name = getIntent().getExtras().get("room_name").toString();
我在所有聊天室中拥有的列表视图都有一个单击甚至监听器,当单击房间时,它会将房间名称作为字符串传递到所有这一切都应该发生的活动中。因此,我将该变量传递给检索,以便在输入特定房间时更新引用:
chatroomsref = FirebaseDatabase.getInstance().getReference("Chatrooms").child(room_name);
但现在我得到了这个错误:
进程:com.brunelcs.group13.anyquestions,PID:14662 java.lang.IllegalStateException:ArrayAdapter 要求资源 ID 为 TextView 在 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:437)
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textViewUserID"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="12dp"
android:layout_marginTop="14dp"
android:layout_weight="1"
android:text="UserID"
android:textAlignment="viewStart"
android:textColor="@color/colorPrimary"
android:textSize="12sp" />
<TextView
android:id="@+id/textViewDateTime"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewUserID"
android:layout_marginStart="11dp"
android:layout_toEndOf="@+id/textViewUserID"
android:text="DateTime"
android:textAlignment="center"
android:textColor="@color/colorPrimary"
android:textSize="12sp" />
<TextView
android:id="@+id/textViewMessage"
android:layout_width="500dp"
android:layout_height="50dp"
android:layout_alignStart="@+id/textViewUserID"
android:layout_below="@+id/textViewUserID"
android:text="Message"
android:textAlignment="viewStart"
android:textSize="15dp" />
<Button
android:id="@+id/button5"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_alignStart="@+id/textViewMessage"
android:layout_below="@+id/textViewMessage"
android:text="Replies" />
<Button
android:id="@+id/button6"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_alignBottom="@+id/button5"
android:layout_alignStart="@+id/textViewDateTime"
android:text="Like" />
<TextView
android:id="@+id/textView11"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button6"
android:layout_marginBottom="13dp"
android:layout_toEndOf="@+id/button6"
android:text="24"
android:textAlignment="center" />
我也不应该使用:
//for (DataSnapshot child : dataSnapshot.getChildren()) {
}
并在那里为房间的每个孩子检索数据?但我不知道该怎么做。
【问题讨论】:
-
解决最后一个错误,查看stackoverflow.com/questions/9280965/…
-
我已经检查了帖子,据我了解,我只能使用这种方法使用一个文本视图。我怎样才能让多个文本视图工作?
标签: java android listview arraylist