Firebaseを使用している単純なメッセージングシステムの取得に取り組んでいます。しかし、この1つのことが、私自身の髪を引き出したいと思っています。私は<String,Message>
のペアを格納するために使用しているマップを持っています。ここでMessage
は私が書いたクラスです。私はマップから私のメッセージを得ることはできません。私は、map.containsKey(key)
がtrue
を返しても、map.get(key)
がメッセージを返さないように問題を切り分けました。これを引き起こしている可能性があり、どうすれば修正できますか?ここでmap.containsKey(key)はtrueを返しますが、map.get(key)は何も返しません。
は、Messageクラスです:
public class Message {
private long timeStamp;
private String message;
private String to;
private String from;
public Message(String message, String to, String from)
{
timeStamp = new Date().getTime();
this.message = message;
this.to = to;
this.from = from;
}
public Message(){
}
public String getMessageText() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public String getTo() {
return this.to;
}
public void setTo(String to) {
this.to = to;
}
public String getFrom() {
return this.from;
}
public void setFrom(String from) {
this.from = from;
}
public long getTimeStamp() {
return this.timeStamp;
}
public void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
}
これはtrue
を返しmap.containsKey(key)
を見せてくれた、私が使用するコードです:
public class LoadMessages extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load_messages);
// Load previous messages
final LinearLayout messagesLayout = (LinearLayout) findViewById(R.id.messagesLayout);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = database.getReference(getIntent().getStringExtra("user") + "/Messages");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
Map<String, Message> map = new TreeMap<String, Message>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Message m = snapshot.getValue(Message.class);
map.put(String.valueOf(m.getTimeStamp()), m);
TextView TV = new TextView(LoadMessages.this);
Boolean ck = map.containsKey(String.valueOf(m.getTimeStamp()));
if (ck) {
TV.setText("Contains key");
} else {
TV.setText("Doesn't contain key.");
}
messagesLayout.addView(TV);
}
// code to iterate through map entries and display messages
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
// code Add new message onClick of fab
}
}
とコードのこのバージョンはTextView
に何も示しています
public class LoadMessages extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load_messages);
// Load previous messages
final LinearLayout messagesLayout = (LinearLayout) findViewById(R.id.messagesLayout);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = database.getReference(getIntent().getStringExtra("user") + "/Messages");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
Map<String, Message> map = new TreeMap<String, Message>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Message m = snapshot.getValue(Message.class);
map.put(String.valueOf(m.getTimeStamp()), m);
TextView TV = new TextView(LoadMessages.this);
Message test = map.get(String.valueOf(m.getTimeStamp()));
TV.setText(test.getMessageText());
messagesLayout.addView(TV);
}
// code to iterate through map entries and display messages
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
// code Add new message onClick of fab
}
}
私はコメントしたいと思いますが、明らかに50人の担当者がいません。簡単な質問ですが、なぜString.valueOf(m.getTimeStamp())を使用していますか? m.getTimeStamp()+ "" –
データベース構造を追加してください。 –