使用Android java和firebase的分支之间的关系

使用Android java和firebase的分支之间的关系,java,android,firebase,relationship,Java,Android,Firebase,Relationship,我想建立一个从一个分支到另一个分支的关系,以下图为例。 我想将来自pubMsg的消息与来自父消息的repMsg:“Hello”回复的repMsg:“Hello”关联起来 所以我的回复列表代码是: reply_btn.setOnClickListener(new OnClickListener(){ public void onClick(View v){ // get prompts.xml view LayoutInflater li = Layou

我想建立一个从一个分支到另一个分支的关系,以下图为例。

我想将来自
pubMsg的消息与来自父
消息的
repMsg:“Hello”
回复的
repMsg:“Hello”
关联起来

所以我的回复列表代码是:

reply_btn.setOnClickListener(new OnClickListener(){
    public void onClick(View v){

        // get prompts.xml view
        LayoutInflater li = LayoutInflater.from(context);
        View promptsView = li.inflate(R.layout.reply_prompt, null);

        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        context);

        // set prompts.xml to alertdialog builder
        alertDialogBuilder.setView(promptsView);

        final TextView userInput = (TextView) promptsView
        .findViewById(R.id.editTextDialogUserInput);

        // set dialog message
        alertDialogBuilder
        .setCancelable(false)
        .setPositiveButton("OK",
        new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                String msg_reply = userInput.getText().toString();
                reply_func(msg_reply);

            }

            private void reply_func(String msg_reply) {
                // TODO Auto-generated method stub
                bundle = getIntent().getExtras();
                String language_chosen = bundle.getString("lang_pick");
                // get user input and set it to result
                // edit text
                Firebase f_reply = new Firebase("https://myapp.firebaseio.com/Language/"+language_chosen+"/Replies");

                Map<String, Object> replMsg = new HashMap<String, Object>();
                replMsg.put("repMsg", msg_reply.toString());
                f_reply.push().setValue(replMsg);

                replyAdapter disadpt = new replyAdapter(getMsgActivity.this,reply_msg);
                reply_list.setAdapter(disadpt);

                reply_msg.add(replMsg.get("repMsg").toString());


                reply_msg_test.setText(msg_reply);
            }
reply\u btn.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
//获取prompts.xml视图
LayoutInflater li=LayoutInflater.from(上下文);
View promptsView=li.充气(R.layout.reply_提示符,空);
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(
上下文);
//将prompts.xml设置为alertdialog builder
alertDialogBuilder.setView(promptsView);
最终文本视图用户输入=(文本视图)提示视图
.findViewById(R.id.editTextDialogUserInput);
//设置对话框消息
alertDialogBuilder
.setCancelable(错误)
.setPositiveButton(“确定”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
字符串msg_reply=userInput.getText().toString();
回复func(消息回复);
}
私有无效回复函数(字符串消息回复){
//TODO自动生成的方法存根
bundle=getIntent().getExtras();
String language_selected=bundle.getString(“lang_pick”);
//获取用户输入并将其设置为结果
//编辑文本
Firebase f_reply=新Firebase(“https://myapp.firebaseio.com/Language/“+所选语言+”/答复”);
Map replMsg=new HashMap();
replMsg.put(“repMsg”,msg_reply.toString());
f_reply.push().setValue(replMsg);
replyAdapter disadpt=新的replyAdapter(getMsgActivity.this,reply_msg);
回复列表。设置适配器(disadpt);
reply_msg.add(replmg.get(“repMsg”).toString());
reply_msg_test.setText(msg_reply);
}
上面的代码将用文本编辑器提示我,当我单击“完成”时,它将显示刚刚添加的消息列表

Firebase f_reply = new Firebase("https://myapp.firebaseio.com/Language/"+language_chosen+"/Replies");

f_reply.addValueEventListener(new ValueEventListener(){

    @Override
    public void onCancelled() {
        // TODO Auto-generated method stub

    }
    @Override
    public void onDataChange(DataSnapshot snap_reply) {
        // TODO Auto-generated method stub
        Iterable<DataSnapshot> rs = snap_reply.getChildren();
        Iterator<DataSnapshot> irs = rs.iterator();

        while(irs.hasNext())
        {
            Map<String, Object> nPost = (Map<String, Object>) irs.next().getValue();
            replyAdapter disadpt = new replyAdapter(getMsgActivity.this,reply_msg);
            reply_list.setAdapter(disadpt);

            reply_msg.add(nPost.get("repMsg").toString());
        }

        //  Toast.makeText(getBaseContext(), (CharSequence) irs.next(),
        //          Toast.LENGTH_SHORT).show();
        /*        while(irs.hasNext())
        {
            Map<String, Object> replMsg = new HashMap<String, Object>();
            replyAdapter disadpt = new replyAdapter(getMsgActivity.this,reply_msg);
            reply_list.setAdapter(disadpt);
            reply_msg.add(replMsg.get("repMsg").toString());
            irs.next();
        } */
    }
});
Firebase f_reply=新的Firebase(“https://myapp.firebaseio.com/Language/“+所选语言+”/答复”);
f_reply.addValueEventListener(新的ValueEventListener(){
@凌驾
已取消的公共无效(){
//TODO自动生成的方法存根
}
@凌驾
公共无效onDataChange(数据快照快照回复){
//TODO自动生成的方法存根
Iterable rs=snap_reply.getChildren();
迭代器irs=rs.Iterator();
while(irs.hasNext())
{
Map nPost=(Map)irs.next().getValue();
replyAdapter disadpt=新的replyAdapter(getMsgActivity.this,reply_msg);
回复列表。设置适配器(disadpt);
reply_msg.add(nPost.get(“repMsg”).toString());
}
//Toast.makeText(getBaseContext(),(CharSequence)irs.next(),
//吐司。长度(短)。show();
/*while(irs.hasNext())
{
Map replMsg=new HashMap();
replyAdapter disadpt=新的replyAdapter(getMsgActivity.this,reply_msg);
回复列表。设置适配器(disadpt);
reply_msg.add(replmg.get(“repMsg”).toString());
下一步();
} */
}
});
上面的代码将显示列表视图中的所有内容,但在我添加新消息时也会调用它,因此当我在提示下单击“finish”时会显示类似的内容。例如,“one”,它显示为“one”,“one”。因此,我的问题是

  • 它显示两条相同的添加消息,因为两个集合代码发生冲突
  • 我不知道如何将回复与正确的消息联系起来(从顶部的图表)

  • 谢谢你的阅读(呸),这是我的大项目,我在编程方面很差,期待您的评论和帮助,谢谢。

    有人能帮我解决第2个问题吗。我的最后一个项目需要这个,但我不知道如何将一个孩子与另一个孩子联系起来。回复邮件。我看不到这两个项目之间有任何关系。它们没有共享id,或者任何可以用于逻辑链接它们的属性。标准是什么?您是否尝试过使用类似
    /repries///…
    的内容设置回复?谢谢,我的想法在脑海中。给每条消息一个unqiue id,并调用与该id相等的所有回复。我将首先测试。第一个问题是修复,我的朋友p指出了哪里出了问题,是arraylist(每次都在不断增加,我都会回复),所以添加回复“a”,然后添加“b”,它会像“aab”等一样存储。所以他所做的就是添加arraylist.clear():P