2017-02-20 68 views
-2

我想通过这个命令来保存两个用户之间的聊天我使用的开发在Android聊天应用火力

mFirebaseDatabaseReferenceMessage.child("messages").child(mEmail).child(currentReceiverEmail).push().setValue(messages); 

消息对象

private String id; 
private String text; 
private String senderEmail; 

消息节点已创建,但电子邮件发件人的电子邮件和currentReceiverEmail接收者的电子邮件不是。我希望在两个用户第一次相互聊天时创建这两个节点,并将以后的聊天记录保存在此节点中。有什么办法可以做到吗?我使用这种结构,以便我可以轻松地检索任何两个用户之间的聊天。 以及如果有更好的方式在两个用户之间在Firebase中存储聊天记录,请提及它。

+0

如果你设置了火力规则正确,我认为它应该工作,因为它是自动创建的中间节点为你。你能分享这个规则吗? – user1431765

+0

我没有改变默认规则。 @ user1431765 –

回答

-1

使用此

public class Activity_Message extends AppCompatActivity implements View.OnClickListener { 


EditText msg; 
String To_Name,To_Id; 
String My_Name,My_Id; 
Firebase reference1, reference2; 



@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.message_list); 

    Firebase.setAndroidContext(this); 
    reference1 = new Firebase("https://chatapp-e1eabdgdfg.firebaseio.com/Message/" + My_Name + "_" + To_Name); 
    reference2 = new Firebase("https://chatapp-e1eabgfggf.firebaseio.com/Message/" + To_Name + "_" + My_Name); 
    initViews(); 

    loadData(); 
} 



private void initViews() { 


    msg = (EditText)findViewById(R.id.msg_edit); 
    ImageView send = (ImageView)findViewById(R.id.send_btn); 
    send.setOnClickListener(this); 




    reference1.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      //get data here 


     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      //Log.d("fdfddhjChild Changed",dataSnapshot.getValue().toString()); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 


    }); 



} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 

     case R.id.send_btn: 

      String messageText = msg.getText().toString(); 
      if(!messageText.equals("")){ 
       Map<String, String> map = new HashMap<String, String>(); 
       map.put("message", messageText); 
       map.put("from_id", My_Id); 
       map.put("to_id", To_Id); 
       map.put("date_time", currDate); 

       reference1.push().setValue(map); 
       reference2.push().setValue(map); 

      } 

      msg.setText(""); 

      break; 

    } 
} 

}

+0

Firebase类和loaddata()函数的结构是什么? –

-1
public class Activity_Message extends AppCompatActivity implements View.OnClickListener { 


EditText msg; 
String To_Name,To_Id; 
String My_Name,My_Id; 
Firebase reference1, reference2; 



@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.message_list); 

    Firebase.setAndroidContext(this); 
    reference1 = new Firebase("https://chatapp-e1eabdgdfg.firebaseio.com/Message/" + My_Name + "_" + To_Name); 
    reference2 = new Firebase("https://chatapp-e1eabgfggf.firebaseio.com/Message/" + To_Name + "_" + My_Name); 
    initViews(); 

    loadData(); 
} 



private void initViews() { 


    msg = (EditText)findViewById(R.id.msg_edit); 
    ImageView send = (ImageView)findViewById(R.id.send_btn); 
    send.setOnClickListener(this); 




    reference1.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      //get data here 


     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      //Log.d("fdfddhjChild Changed",dataSnapshot.getValue().toString()); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 


    }); 



} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 

     case R.id.send_btn: 

      String messageText = msg.getText().toString(); 
      if(!messageText.equals("")){ 
       Map<String, String> map = new HashMap<String, String>(); 
       map.put("message", messageText); 
       map.put("from_id", My_Id); 
       map.put("to_id", To_Id); 
       map.put("date_time", currDate); 

       reference1.setValue(map); 
       reference2.setValue(map); 





      } 

      msg.setText(""); 

      break; 

    } 
} 
} 

试试这个代码....

+0

我已收到来自@Rajkumar_Kumawat的答案 –