Java 保存在firebase数据库中但无法在listview中查看的聊天信息
对于我的聊天应用程序,我已将Java 保存在firebase数据库中但无法在listview中查看的聊天信息,java,android,firebase,listview,firebase-realtime-database,Java,Android,Firebase,Listview,Firebase Realtime Database,对于我的聊天应用程序,我已将EditText数据保存到firebase,但我无法在ListView中显示相同的数据。我可以在Firebase数据库中看到EditText数据,我想在列表视图中检索它。有人能帮我吗 public class Chatbox extends AppCompatActivity { private DatabaseReference databaseReference; private Button btnsend; private Edit
EditText
数据保存到firebase,但我无法在ListView
中显示相同的数据。我可以在Firebase数据库中看到EditText
数据,我想在列表视图中检索它。有人能帮我吗
public class Chatbox extends AppCompatActivity {
private DatabaseReference databaseReference;
private Button btnsend;
private EditText editText;
private ListView listView;
private ArrayList<String> arrayList = new ArrayList<>();
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chatbox);
databaseReference = FirebaseDatabase.getInstance().getReference();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
btnsend = findViewById(R.id.sendbutton);
editText = findViewById(R.id.typemessage);
listView = findViewById(R.id.listmessages);
btnsend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
databaseReference.child("Chat").child("Name").push().setValue(editText.getText().toString());
}
});
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
DatabaseReference chatreference=databaseReference.child("Chat");
chatreference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String chatmsg = snapshot.child("Name").getKey();
Toast.makeText(Chatbox.this, "keys " + chatmsg, Toast.LENGTH_SHORT).show();
arrayList.add(chatmsg);
}
listView.setAdapter(adapter);
}
catch (Exception ex)
{
Toast.makeText(Chatbox.this, "Error " + ex.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
公共类聊天室扩展了AppCompative活动{
私有数据库参考数据库参考;
私人按钮btnsend;
私人编辑文本;
私有列表视图列表视图;
私有ArrayList ArrayList=新ArrayList();
专用阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u聊天室);
databaseReference=FirebaseDatabase.getInstance().getReference();
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,arrayList);
btnsend=findviewbyd(R.id.sendbutton);
editText=findViewById(R.id.typemessage);
listView=findViewById(R.id.listmessages);
btnsend.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
databaseReference.child(“Chat”).child(“Name”).push().setValue(editText.getText().toString());
}
});
databaseReference.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
DatabaseReference chatreference=DatabaseReference.child(“聊天”);
chatreference.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
试一试{
对于(DataSnapshot快照:DataSnapshot.getChildren()){
字符串chatmsg=snapshot.child(“Name”).getKey();
Toast.makeText(Chatbox.this,“keys”+chatmsg,Toast.LENGTH\u SHORT.show();
arrayList.add(chatmsg);
}
setAdapter(适配器);
}
捕获(例外情况除外)
{
Toast.makeText(Chatbox.this,“Error”+ex.getMessage(),Toast.LENGTH\u SHORT.show();
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
试试这个
FirebaseDatabase.getInstance()
.getReference("Chat")
.child("Name")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<String> chatMessages = new ArrayList<>();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
try {
String chatMessage = String.valueOf(dataSnapshot.child(dataSnapshot1.getKey()).getValue());
chatMessages.add(chatMessage);
} catch (DatabaseException e) {
e.printStackTrace();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
callback.onFailure(null);
}
});
FirebaseDatabase.getInstance()
.getReference(“聊天”)
.儿童(“姓名”)
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
List chatMessages=new ArrayList();
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
试一试{
String chatMessage=String.valueOf(dataSnapshot.child(dataSnapshot1.getKey()).getValue());
添加(chatMessage);
}捕获(数据库异常){
e、 printStackTrace();
}
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
callback.onFailure(null);
}
});
我猜您想要检索的是数据而不是密钥:
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
DatabaseReference chatreference=databaseReference.child("Chat");
chatreference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String chatmsg = snapshot.child("Name").getValue();
Toast.makeText(Chatbox.this, "keys " + chatmsg, Toast.LENGTH_SHORT).show();
arrayList.add(chatmsg);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
或者希望同时将键和值存储在数组列表中?您正在使用以下命令将消息添加到数据库中:
databaseReference.child("Chat").child("Name")
这意味着您还必须从同一路径读取消息:
databaseReference.child("Chat").child("Name").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String chatmsg = snapshot.getValue(String.class);
arrayList.add(chatmsg);
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException()l
}
});
这些变化:
- 在将消息添加到同一节点时,请侦听该节点
- 删除了嵌套的侦听器,这是不需要的
- 从每个子快照中获取值,而不是尝试读取不存在的
Name
属性
- 删除了
try…catch
,因为默认行为是将消息写入logcat,这比在toast中显示消息更有用
- 已实现的
onCancelled
,因为您永远不应该忽略错误
请发布snapshot.child(“Name”).getKey()的日志
您是数据库结构。问题是什么?如何在注释中添加图片…我无法附加DB pictureAlex,我想为我的应用程序创建聊天页面。当用户输入他的消息时,它将存储在firebase数据库中,但我无法在listview中显示相同的内容。Ashish,我已在说明中添加了DB image。示例ase检查和帮助