2017-05-17 2 views
0

firebaseデータベースに送信するすべてのメッセージに対してTime Stampを保存します。これは正しい方法ですか?Androidでfirebaseデータベースにメッセージのタイムスタンプを送信するにはどうすればいいですか?

私のコードのどこかで、次のものを使用しました。

Message message = new Message(null, mUserName, downloadUrl.toString(),ServerValue.TIMESTAMP); 
messagesDatabaseReference.push().setValue(message); 

アプリを実行しようとするとこのエラーが発生します。

com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.lang.Long 

これは私のモデルクラス、Message次のとおりです。私はあなたがデータベースからtimestampを取得しているときに、エラーメッセージを取得していると仮定し

public class Message { 

    private String text; 
    private String name; 
    private String photoUrl; 
    private Map<String,String> timeStamp; 

    public Map<String, String> getTimeStamp() { 
     return timeStamp; 
    } 

    public void setTimeStamp(Map<String, String> timeStamp) { 
     this.timeStamp = timeStamp; 
    } 

    public Message(String text, String name, String photoUrl, Map<String,String> timeStamp) { 
     this.text = text; 
     this.name = name; 
     this.photoUrl = photoUrl; 
     this.timeStamp = timeStamp; 
    } 

     // Other getters and setters 
} 

答えて

0

MainActivity

public class Message { 

    private String text; 
    private String name; 
    private String photoUrl; 
    private String dateAndTime; 

    public Message(String text, String name, String photoUrl, String dateAndTime){ 
    this.text = text; 
    this.name = name; 
    this.photoUrl = photoUrl; 
    this.dateAndTime = dateAndTime; 
    } 
    // getters and setters 
} 

、私はFirebaseデータベースへのユーザーのメッセージと一緒にタイムスタンプを送信するために次のことを実施しています。出来た!

Date date = new Date(); 
SimpleDateFormat formatter = new SimpleDateFormat("EEE, MMM dd hh:mm a"); 
String dateAndTime = formatter.format(date); 
Message message = new Message(mMessageEditText.getText().toString(), mUserName, null, dateAndTime); 
messagesDatabaseReference.push().setValue(message); 
1

。ルールは、timestampMapと設定しているときに検索するときに、Longとして取得するというルールです。だから、それが正しい取得するためには、私はあなたがこの方法を使用することをお勧め:

public static String getTimeDate(long timeStamp){ 
    try{ 
     DateFormat dateFormat = getDateTimeInstance(); 
     Date netDate = (new Date(timeStamp)); 
     return dateFormat.format(netDate); 
    } 
    catch(Exception e){ 
     return "date"; 
    } 
} 

日付のみを検索したい場合は、以下の方法を使用してください:あなたはtimestampを取得している場合は

static String getDate(long timeStamp){ 
    try{ 
     DateFormat dateFormat = getDateInstance(); 
     Date netDate = (new Date(timeStamp)); 
     return dateFormat.format(netDate); 
    } 
    catch(Exception e){ 
     return "date"; 
    } 
} 

を特定のノードにリスナーを配置し、次のようにマップ上を反復処理します。

if (entry.getKey().equals("timeStamp")) { 
    Long timeStampLong = (Long) entry.getValue(); 
    String timeStamp = getDate(timeStampLong); 
    ((TextView)findViewById(R.id.time_stamp)).setText(timeStamp); 
} 

希望します。私は私のモデルクラス、Messageを改造しました

+0

これを私の 'Message'クラスに入れておくべきですか? – Chip

+0

はい、間違いなく。そのとおりです。 –

+0

私はそれを行い、あなたに戻ってきます!感謝します。 – Chip

関連する問題