2016-09-29 11 views
1

フィールドとしてPOJOに、現在返されたノードのキーを置くために、私はこの質問Firebase:どのように

のタイトルを改善したいと考えて、私は次のことを持っていると仮定します。

abstract class getMessage { 
     public getMessage(String k) { 
     get(k); 
     } 

     public abstract void Success(Message message); 
     private void get(final String k) { 
     DatabaseReference r = DB.child("chat/messages/" + k); 
     r.addListenerForSingleValueEvent(new ValueEventListener(){ 
      @Override 
      public void onDataChange(DataSnapshot d) { 
       Message msg = d.getValue(Message.class); 
       Success(msg); 
      } 

      @Override 
      public void onCancelled(DatabaseError e) { 
       Log.w("Get Message", e.toException()); 
      } 
     }); 
     } 
    } 

メッセージクラスは、返されたノードのキーである必要があり、フィールド「メッセージID」を、持っていますが、返されたデータは、このキーの子です。この前


、私はフィールドを挿入:あなたは上記を参照することができたよう

Long time   = d.child("time").getValue(); 
Long String  = d.child("text").getValue(); 
Long messageid = d.getKey(); 
Message message = new Message(time, messageid, text); 

、私は「メッセージID」を取得し、メッセージオブジェクトにそれを置くことができましたが、使用して新しいアプローチ(ファーストコードブロック)、私はこれを行う方法がわかりません。

可能ですか?

EDIT

メッセージクラス:

public class Message implements Serializable { 
    private String name; 
    private String msg; 
    private String icon; 
    private String recipient; 
    private String sender; 
    private String shared; 
    private Boolean group; 
    private Object time; 
    private String messageid; 
    private Boolean local; 
    private Boolean delivered; 
    private Boolean read; 
    private HashMap<String, Boolean> allowed; 

    private String file; 
    private Boolean attachment; 
    private Boolean state; 


    public Message(String Name, String Msg, String Recipient, String Sender, String Shared, Boolean Group, String Icon, 
        Object Time, String Messageid, Boolean Local, Boolean Delivered, Boolean Read, 
        HashMap<String, Boolean> Allowed, String File, Boolean Attachment, Boolean State) { 
     name = Name; 
     msg = Msg; 
     recipient = Recipient; 
     sender = Sender; 
     shared = Shared; 
     group = Group; 
     time = Time; 
     icon = Icon; 
     messageid = Messageid; 
     local = Local; 
     delivered = Delivered; 
     read = Read; 
     file = File; 
     allowed = Allowed; 
     attachment = Attachment; 
     state   = State; 
    } 

    public Message() { 

    } 

    public Boolean getAttachment() { 
     return attachment; 
    } 

    public Boolean getState() { 
     return state; 
    } 

    public HashMap<String, Boolean> getAllowed() { 
     return allowed; 
    } 

    public String getFile() { 
     return file; 
    } 

    public Boolean getDelivered() { 
     return delivered; 
    } 

    public Boolean getRead() { 
     return read; 
    } 

    public Boolean getLocal() { 
     return local; 
    } 

    public String getMessageid() { 
     return messageid; 
    } 

    public String getName() { 
     return name; 
    } 

    public Object getTime() { 
     return time; 
    } 

    public String getMsg() { 
     return msg; 
    } 

    public Boolean getGroup() { 
     return group; 
    } 

    public String getRecipient() { 
     return recipient; 
    } 

    public String getSender() { 
     return sender; 
    } 

    public String getShared() { 
     return shared; 
    } 

    public String getIcon() { 
     return icon; 
    } 
} 
+0

onDataChangeメソッド内

public void setMessageid(String messageId) { this.messageid = messageId; } 

あなたは 'message'でクラスを投稿することができますか? 'DataSnapshot.getKey()'はStringを返すので、これを行うことができるのは非常に奇妙です。 ''長いmessageid = d.getKey(); ' – Wilik

+0

@Wilik、少し長く、謝罪します。 – Relm

+0

@Wilik編集を参照してください。 – Relm

答えて

3

あなたはMessageクラスにセッターを追加することによって、これを行うし、キーを設定するには、そのメソッドを呼び出すことができます。

Message msg = d.getValue(Message.class); 
msg.setMessageId(d.getKey()); 
Success(msg); 
関連する問題