Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从未调用FIrebase数据库addListenerForSingleValueEvent listner_Android_Firebase_Firebase Realtime Database_Chat - Fatal编程技术网

Android 从未调用FIrebase数据库addListenerForSingleValueEvent listner

Android 从未调用FIrebase数据库addListenerForSingleValueEvent listner,android,firebase,firebase-realtime-database,chat,Android,Firebase,Firebase Realtime Database,Chat,我有一个聊天屏幕,有Firebase数据库支持聊天信息。我可以将消息发布到屏幕和数据库,但当我离开聊天室并返回聊天室屏幕时,问题就出现了 聊天屏幕变为空,我想从Firebase数据库加载所有以前的聊天记录。因此,我在chat node中又创建了一个Firebase引用,但无法让用户聊天,因为onCreate中的onDataChange从未被调用 这是我的聊天屏幕课程 public class Chat_Screen extends AppCompatActivity implements Vie

我有一个聊天屏幕,有Firebase数据库支持聊天信息。我可以将消息发布到屏幕和数据库,但当我离开聊天室并返回聊天室屏幕时,问题就出现了

聊天屏幕变为空,我想从Firebase数据库加载所有以前的聊天记录。因此,我在chat node中又创建了一个Firebase引用,但无法让用户聊天,因为onCreate中的
onDataChange
从未被调用

这是我的聊天屏幕课程

public class Chat_Screen extends AppCompatActivity implements View.OnClickListener,ChildEventListener{

    public static final String TAG = "###CHAT SCREEN###";
    private EditText TypedMsg;
    private ImageButton SendButton,Emo_Button;
    String UserName_Intent,UserImage_Intent,UserID_Intent,Room_Name_Intent;
    String Chat_Msg,Chat_UserName;

    RecyclerView.Adapter adapter;
    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;

    Iterator iterator;
    Toolbar toolbar;
    private ProgressDialog progressDialog;

    List<Chat_Wrapper> message=new ArrayList<>();;

    DatabaseReference databaseReference;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_screen_main);
        TypedMsg= (EditText) findViewById(R.id.Chat_Screen_Text_Message);
        SendButton= (ImageButton) findViewById(R.id.Chat_Screen_Send);
        Emo_Button= (ImageButton) findViewById(R.id.Chat_Screen_Smiley);
        toolbar= (Toolbar) findViewById(R.id.Chat_Screen_Toolbar);
        progressDialog=new ProgressDialog(this);
        progressDialog.setMessage("This Is Chat Room");
        progressDialog.show();

        // GET INTENT VALUES FROM USER PROFILE CLASS

        UserName_Intent=getIntent().getExtras().getString("Get_Name");
        UserImage_Intent=getIntent().getExtras().getString("Get_Image");
        UserID_Intent=getIntent().getExtras().getString("Get_Phone");
        Room_Name_Intent=getIntent().getExtras().getString("room_user");

        // RECYCLER VIEW
        recyclerView= (RecyclerView) findViewById(R.id.Chat_Screen_Message_List);
        recyclerView.setHasFixedSize(true);
        layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);


        //FIREBASE FETCH ALL PREVIOUS CHAT OF USERS/CHATROOM ------THIS NEVER CALLS
        DatabaseReference db=FirebaseDatabase.getInstance().getReference(Room_Name_Intent);
        Log.d(TAG,"Database Reference of child "+db);
        db.addListenerForSingleValueEvent(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                    Log.d(TAG,"Value of SnapShop is calling");
                    Log.d(TAG,"Value of SnapShop is calling "+snapshot.getValue());
                    Log.d(TAG,"Value of SnapShop is calling 2nd "+snapshot.getValue());

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });



        Log.d(TAG,"Value of List "+message+" Value of Adapter "+adapter);
        adapter=new Chat_Adapter(this,message);
        recyclerView.setAdapter(adapter);



        //INITIALIZING MESSAGE ARRAYLIST


        SendButton.setOnClickListener(this);

        databaseReference= FirebaseDatabase.getInstance().getReference().getRoot().child(Room_Name_Intent);
        databaseReference.addChildEventListener(this);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.chat_screen_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //HANDLE ITEM SELECTION
        switch (item.getItemId()) {
            case R.id.sendFile:
                Log.d(TAG, "Send File Menu Clicked");
                return true;
            case R.id.geo:
                Log.d(TAG, "Geo Fencing Button Clicked");
                return true;
            case R.id.Call:
                Log.d(TAG, "Call Button Clicked");
                Toast.makeText(this, "Call Button Clicked", Toast.LENGTH_LONG).show();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }

    }

    @Override
    public void onClick(View v) {
        int itemClick=v.getId();

        switch (itemClick){
            case R.id.Chat_Screen_Send:
                Log.d(TAG,"Send Button Pressed");

                Log.d(TAG,"FireBase Chat Room Level "+databaseReference);
                //GET MESSAGE FROM EDIT TEXT INTO HASHMAP TO UPDATE DATABASE
                Map<String,Object> map=new HashMap<>();
                map.put("Name",UserName_Intent);
                map.put("Message",TypedMsg.getText().toString());

                String Temp_Key=databaseReference.push().getKey();
                Map<String,Object> RoomKey=new HashMap<>();
                databaseReference.updateChildren(RoomKey);
                DatabaseReference message_Root=databaseReference.child(Temp_Key);
                message_Root.updateChildren(map);
                Log.d(TAG,"Msg Root "+message_Root);

                TypedMsg.setText("");
                break;

        }

    }


    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        append_chat_conversation(dataSnapshot);
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        append_chat_conversation(dataSnapshot);
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

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

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
    private void append_chat_conversation(DataSnapshot dataSnapshot){
        iterator=dataSnapshot.getChildren().iterator();
        while (iterator.hasNext()){

            Chat_Msg=(String) ((DataSnapshot)iterator.next()).getValue();
            Chat_UserName= (String) ((DataSnapshot)iterator.next()).getValue();

            Calendar calendar=Calendar.getInstance(Locale.getDefault());
            int hour=calendar.get(Calendar.HOUR_OF_DAY);
            int min=calendar.get(Calendar.MINUTE);
            int second=calendar.get(Calendar.SECOND);
            Log.d(TAG,"Time of the Day "+hour+" -- "+min+" -- "+second);
            String time=(hour+" -- "+min+" -- "+second);





            Log.d(TAG,Chat_Msg+" TIME "+time+" PHONE "+UserID_Intent+" User Image "+UserImage_Intent+" User Name "+UserName_Intent);

            Chat_Wrapper chat_wrapper=new Chat_Wrapper(Chat_Msg,time,UserID_Intent,UserImage_Intent);
            message.add(chat_wrapper);

            adapter.notifyItemInserted(adapter.getItemCount()+1);


            Log.d(TAG,"Chat Msg & User Name "+Chat_Msg+" "+Chat_UserName+" Message List "+message.size());

        }
    }
}
public class Chat\u屏幕扩展AppCompatActivity实现View.OnClickListener、ChildEventListener{
公共静态最终字符串标记=“####聊天屏幕###”;
私有编辑文本类型DMSG;
私有图像按钮SendButton,Emo_按钮;
字符串UserName\u Intent、UserImage\u Intent、UserID\u Intent、Room\u Name\u Intent;
字符串Chat_Msg,Chat_用户名;
RecyclerView.适配器;
回收视图回收视图;
RecyclerView.LayoutManager LayoutManager;
迭代器;
工具栏;
私有进程对话;
列表消息=新建ArrayList();;
数据库参考数据库参考;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.chat\u screen\u main);
TypedMsg=(EditText)findViewById(R.id.Chat\u Screen\u Text\u Message);
SendButton=(ImageButton)findViewById(R.id.Chat\u Screen\u Send);
Emo_按钮=(ImageButton)findViewById(R.id.Chat_Screen_Smiley);
工具栏=(工具栏)findViewById(R.id.Chat\u屏幕\u工具栏);
progressDialog=新建progressDialog(此);
progressDialog.setMessage(“这是聊天室”);
progressDialog.show();
//从用户配置文件类获取意图值
UserName_Intent=getIntent().getExtras().getString(“Get_Name”);
UserImage_Intent=getIntent().getExtras().getString(“Get_Image”);
UserID_Intent=getIntent().getExtras().getString(“Get_Phone”);
房间名称=getIntent().getExtras().getString(“房间用户”);
//回收者视图
recyclerView=(recyclerView)findViewById(R.id.Chat\u Screen\u Message\u List);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
//FIREBASE获取所有以前的用户聊天室/聊天室------这从不调用
DatabaseReference db=FirebaseDatabase.getInstance().getReference(房间名称);
Log.d(标签,“子数据库引用”+db);
db.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Log.d(标记“SnapShop调用的值”);
Log.d(标记“SnapShop正在调用的值”+snapshot.getValue());
Log.d(标记“SnapShop的值正在调用第二个”+snapshot.getValue());
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
Log.d(标签,“列表值”+消息+“适配器值”+适配器);
adapter=新的聊天室适配器(此,消息);
recyclerView.setAdapter(适配器);
//初始化消息数组列表
SendButton.setOnClickListener(此);
databaseReference=FirebaseDatabase.getInstance().getReference().getRoot().child(房间名称);
databaseReference.addChildEventListener(此);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater MenuInflater=getMenuInflater();
菜单充气(右菜单聊天屏幕菜单,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理项目选择
开关(item.getItemId()){
案例R.id.sendFile:
Log.d(标记“单击发送文件菜单”);
返回true;
案例R.id.geo:
Log.d(标记“点击地理围栏按钮”);
返回true;
案例R.id.呼叫:
Log.d(标记“点击呼叫按钮”);
Toast.makeText(这是“点击呼叫按钮”,Toast.LENGTH_LONG.show();
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
@凌驾
公共void onClick(视图v){
int itemClick=v.getId();
开关(单击项){
案例R.id.聊天\屏幕\发送:
Log.d(标签“按下发送按钮”);
Log.d(标签,“FireBase聊天室级别”+数据库参考);
//从编辑文本到HASHMAP中获取消息以更新数据库
Map Map=newhashmap();
地图放置(“名称”、用户名和意图);
put(“Message”,TypedMsg.getText().toString());
字符串Temp_Key=databaseReference.push().getKey();
Map RoomKey=newhashmap();
databaseReference.updateChildren(RoomKey);
DatabaseReference message_Root=DatabaseReference.child(临时键);
message_Root.updateChildren(map);
Log.d(标记“消息根”+消息根);
TypedMsg.setText(“”);
打破
}
}
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
追加聊天对话(dataSnapshot);
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
追加聊天对话(dataSnapshot);
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
私人聊天室
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();