gpt4 book ai didi

android - Firebase 使用随机生成的 key 访问子项

转载 作者:行者123 更新时间:2023-11-29 02:38:32 25 4
gpt4 key购买 nike

我正在尝试创建一个基本应用程序,在其中我将消息发送到 Firebase 中的实时数据库并在 ListView 中接收它们。(这是 Whatsapp 的翻版。)我发送用户的用户名和消息通过推送消息到数据库。但是,由于随机生成的 key ,我无法读取它们并从中创建 ListView 。 有没有办法接收引用聊天的所有子项并将它们放在 ListView 中?

附言。我无法使用 .getKey 函数,因为消息将来自不同的设备。

页数。 可以提供额外的代码或详细信息。

代码:

public class MessageBoard extends AppCompatActivity {
private static final String TAG = "MessageBoard";

private FirebaseAuth mAuth= FirebaseAuth.getInstance();
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private FirebaseUser user = mAuth.getCurrentUser();
private ArrayList<String> chatlist;
private ArrayAdapter<String> arrayAdapter;
private DatabaseReference ref;
private DatabaseReference Users;
private String username;
private String email;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message_board);

final Button SignOut = (Button) findViewById(R.id.SignOut);
final Button SendMessage = (Button) findViewById(R.id.SendMessage);
final EditText MessageText = (EditText) findViewById(R.id.Message_Text);
final ListView listView = (ListView) findViewById(R.id.Listview);
final TextView UserNameDis = (TextView) findViewById(R.id.UserNameDisplay);
if(user != null){
email = user.getEmail();

}


chatlist = new ArrayList<String>();

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, chatlist);

listView.setAdapter(arrayAdapter);

ref = database.getReference("chat");

//-----------------------------------------------------------------------------------------------------------------------------------------
//to login screen

if(user == null){
startActivity(new Intent(MessageBoard.this, Login.class));
Log.d(TAG, "Login");
}else{
Toast.makeText(MessageBoard.this, "Login Succesfull.",
Toast.LENGTH_SHORT).show();
}




//-----------------------------------------------------------------------------------------------------------------------------------------
//to username screen
if(user.getDisplayName() == null){
startActivity(new Intent(MessageBoard.this, Username.class));
Log.d(TAG, "Username");
}else{
Toast.makeText(MessageBoard.this, "Username Known.",
Toast.LENGTH_SHORT).show();
}



//-----------------------------------------------------------------------------------------------------------------------------------------
//set username welcome text
username = user.getDisplayName();
String Welcome = "Welcome " + username;
UserNameDis.setText(Welcome);


//-----------------------------------------------------------------------------------------------------------------------------------------
//sign out button
SignOut.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(MessageBoard.this,Login.class));

}
});



//-----------------------------------------------------------------------------------------------------------------------------------------
// chat data update
ref.orderByKey();

ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//where I think the receiving code should be
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
//-----------------------------------------------------------------------------------------------------------------------------------------
//message send
SendMessage.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
String push = ref.push().getKey();
ref.child(push).child("message").setValue(username);
ref.child(push).child("username").setValue(username);

}
});
//-----------------------------------------------------------------------------------------------------------------------------------------
}

}

最佳答案

从您可以获得每个随机生成的键及其值的节点检索数据。

ref.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
HashMap<String, Object> allMessage = (HashMap<String, Object>)
dataSnapshot.getValue();
String[] pushIds = allMessage.keySet().toArray(new String[0]);
for (int j = 0; j < allMessage.size(); j++)
{
HashMap<String, Object> singleMessage = (HashMap)
allMessage.get(pushIds[j]);
Message message = new message(singleMessage);
allRequests.add(message);

}
}

@Override
public void onCancelled(DatabaseError databaseError)
{

}
});

你的模型类

 public class Message
{
String message;
public Message(HashMap<String,Object> singleMessage)
{
message = singleMessage.get("message").toString();
}
};

关于android - Firebase 使用随机生成的 key 访问子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com