Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
Java 将新数据分页到firestore中的旧数据上_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 将新数据分页到firestore中的旧数据上

Java 将新数据分页到firestore中的旧数据上,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正在构建一个聊天应用程序,并在对话屏幕中使用分页。首先,我加载了十条消息,最近一条来自firestore,接下来是10条,然后继续。当前10条消息加载到屏幕中时,接下来的10条消息加载到最近消息的下方,但我想在新消息上加载旧消息,这里是我的代码示例 toolbar =findViewById(R.id.toolbar5); toolbar.setTitle(""); setSupportActionBar(toolbar); Objects.req

我正在构建一个聊天应用程序,并在对话屏幕中使用分页。首先,我加载了十条消息,最近一条来自firestore,接下来是10条,然后继续。当前10条消息加载到屏幕中时,接下来的10条消息加载到最近消息的下方,但我想在新消息上加载旧消息,这里是我的代码示例

 toolbar =findViewById(R.id.toolbar5);
    toolbar.setTitle("");
    setSupportActionBar(toolbar);
    Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            finish();
        }
    });

    sendBtn = findViewById(R.id.sendBtn);
    textMsg = findViewById(R.id.txtMessage);
    profileImg=findViewById(R.id.profile_imageChat);
    userName = findViewById(R.id.userName);
    userState = findViewById(R.id.userState);
    refreshMessages = findViewById(R.id.refreshMessages);
    mChat = new ArrayList<>();


    firestore =FirebaseFirestore.getInstance();
    auth =FirebaseAuth.getInstance();
    docref = firestore.collection("users").document(getUser());
    documentReference = firestore.collection("users").document(Objects.requireNonNull(auth.getCurrentUser()).getUid());

    //setting up online and last seen status
    docref.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @SuppressLint("SetTextI18n")
        @Override
        public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
            if(e!=null)
                Log.d("Event",e+"");
            if(documentSnapshot != null){
                if(documentSnapshot.getBoolean("state").equals(true))
                    userState.setText("Online");
                else
                    userState.setText(documentSnapshot.getString("offlineDate"));
            }
            else
                Log.d("Error","Null");
        }
    });

    refreshMessages.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            recieveMessage(auth.getCurrentUser().getUid(),getUser());
        }
    });

    sendBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String message = textMsg.getText().toString().trim();
            String sender=auth.getCurrentUser().getUid();
            if (!message.isEmpty()){

                //getting Current time
                calendar=Calendar.getInstance();
                @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm a");
                final String currentTime = simpleDateFormat.format(calendar.getTime());

                //getting current everything
                Calendar calendar2 = Calendar.getInstance();
                @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
                final String dateSet = simpleDateFormat1.format(calendar2.getTime());

                sendMessage(sender,getUser(),message,currentTime,dateSet);
            }
            else
                Toast.makeText(chatScreen.this,  "Error", Toast.LENGTH_SHORT).show();
            textMsg.setText("");
        }
    });

    constraintLayout=findViewById(R.id.toolbarLayout);
    constraintLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), userProfile.class);
            intent.putExtra("userid",getUser());
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            getApplicationContext().startActivity(intent);
        }
    });


    docref.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            userName.setText(documentSnapshot.getString("Name"));

            recieveMessage(auth.getUid(),getUser());
            //Do coding For image
            storageReference = FirebaseStorage.getInstance().getReference();
            final StorageReference profile = storageReference.child("users/"+getUser());
            profile.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    Picasso.get().load(task.getResult()).into(profileImg);
                }
            });
        }
    });

    //messages recycler view
    recyclerView =findViewById(R.id.recyclerSenderView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
toolbar=findviewbyd(R.id.toolbar5);
工具栏。设置标题(“”);
设置支持操作栏(工具栏);
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
完成();
}
});
sendBtn=findviewbyd(R.id.sendBtn);
textMsg=findviewbyd(R.id.txtMessage);
profileImg=findviewbyd(R.id.profile\u imageChat);
userName=findviewbyd(R.id.userName);
userState=findviewbyd(R.id.userState);
refreshMessages=findViewById(R.id.refreshMessages);
mChat=newarraylist();
firestore=FirebaseFirestore.getInstance();
auth=FirebaseAuth.getInstance();
docref=firestore.collection(“用户”).document(getUser());
documentReference=firestore.collection(“用户”).document(Objects.requirennull(auth.getCurrentUser()).getUid());
//设置联机和上次看到的状态
docref.addSnapshotListener(新的EventListener(){
@SuppressLint(“SetTextI18n”)
@凌驾
public void OneEvent(@Nullable DocumentSnapshot DocumentSnapshot,@Nullable FirebaseFirestoreException e){
如果(e!=null)
Log.d(“事件”,e+);
如果(documentSnapshot!=null){
if(documentSnapshot.getBoolean(“state”).equals(true))
userState.setText(“在线”);
其他的
userState.setText(documentSnapshot.getString(“offlineDate”);
}
其他的
Log.d(“错误”、“空”);
}
});
refreshMessages.setOnRefreshListener(新的SwipeRefreshLayout.OnRefreshListener(){
@凌驾
公共void onRefresh(){
ReceiveMessage(auth.getCurrentUser().getUid(),getUser());
}
});
sendBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
String message=textMsg.getText().toString().trim();
字符串发送者=auth.getCurrentUser().getUid();
如果(!message.isEmpty()){
//获取当前时间
calendar=calendar.getInstance();
@SuppressLint(“SimpleDataFormat”)SimpleDataFormat SimpleDataFormat=新SimpleDataFormat(“hh:mm a”);
最终字符串currentTime=SimpleDataFormat.format(calendar.getTime());
//了解最新的一切
Calendar calendar2=Calendar.getInstance();
@SuppressLint(“SimpleDataFormat”)SimpleDataFormat SimpleDataFormat1=新的SimpleDataFormat(“yyy-MM-dd'T'HH:MM:ss.SSSXXX”);
最终字符串dateSet=simpleDataFormat1.format(calendar2.getTime());
sendMessage(发送者,getUser(),消息,当前时间,日期集);
}
其他的
Toast.makeText(chatScreen.this,“Error”,Toast.LENGTH_SHORT.show();
textMsg.setText(“”);
}
});
constraintLayout=findViewById(R.id.toolbarLayout);
constraintLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent Intent=新的Intent(getApplicationContext(),userProfile.class);
putExtra(“userid”,getUser());
intent.addFlags(intent.FLAG\u活动\u新任务);
getApplicationContext().startActivity(intent);
}
});
docref.get().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(文档快照文档快照){
userName.setText(documentSnapshot.getString(“Name”);
接收消息(auth.getUid(),getUser());
//对图像进行编码
storageReference=FirebaseStorage.getInstance().getReference();
最终的StorageReference配置文件=StorageReference.child(“users/”+getUser());
profile.getDownloadUrl().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Picasso.get().load(task.getResult()).into(profileImg);
}
});
}
});
//邮件回收器视图
recyclerView=findViewById(R.id.recyclerSenderView);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getApplicationContext());
这是我从onCreate调用的函数

 private void  recieveMessage(final String sender , final String reciever) {

    colref = FirebaseFirestore.getInstance().collection("chats");

    Query next;
    if(lastVisible == null)
        next = colref.orderBy("dateSet", Query.Direction.DESCENDING).limit(TOTAL_MESSAGES_TO_LOAD);
    else
        next = colref.orderBy("dateSet").limitToLast(TOTAL_MESSAGES_TO_LOAD).endBefore(lastVisible);

    next.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
            if(e!= null)
                Log.d("onEvent", e+"");
            if(queryDocumentSnapshots != null){

                // mChat.clear();
                //Load item first time
                for (QueryDocumentSnapshot ds : queryDocumentSnapshots){

                   lastvisibleDoc.add(queryDocumentSnapshots.getDocuments().toString());


                    if(ds.getString("Reciever").equals(sender) && ds.getString("Sender").equals(reciever) ||
                            ds.getString("Reciever").equals(reciever) && ds.getString("Sender").equals(sender)){

                        mChat.add(new ChatModel(ds.getString("Sender"),ds.getString("Reciever"),ds.getString("Message"),ds.getString("Time")));
                    }
                }

                // Get the last visible document
                if(queryDocumentSnapshots.size() > 0){
                    lastVisible = queryDocumentSnapshots.getDocuments().get(0);
                    Log.d("VisibleDoc",lastVisible+"");
                    lastvisibleDoc.clear();
                    Toast.makeText(chatScreen.this, "wrk", Toast.LENGTH_SHORT).show();
                }

                adapter =  new messgaeAdapter(getApplicationContext(),mChat);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();

                recyclerView.scrollToPosition(mChat.size()-1);
                refreshMessages.setRefreshing(false);

            }
            else
                Log.d("Document","null");
        }
    });

}
private void receivemessage(最终字符串发送方,最终字符串接收方){
colref=FirebaseFirestore.getInstance()集合(“聊天”);
查询下一步;
if(lastVisible==null)
next=colref.orderBy(“日期集”,Query.Direction.DESCENDING).limit(总消息到负载);
其他的
next=colref.orderBy(“日期集”).limitToLast(从消息到加载的总数).endBefore(最后可见);
next.addSnapshotListener(新的EventListener(){
@凌驾
public void OneEvent(@Nullable QuerySnapshot queryDocumentSnapshots,@Nullable FirebaseFirestoreException e){
如果(e!=null)
Log.d(“onEvent”,e+);
if(queryDocumentSnapshots!=null){
//mChat.clear();
//首次加载项目
用于(QueryDocumentSnapshot ds:QueryDocumentSnapshot){
添加(queryDocumentSnapshots.getDocuments().toString());
if(ds.getString(“接收方”).equals(发送方)和&ds.getString(“发送方”).equals(接收方)||
getString(“receiver”)。
// mChat.clear();
adapter =  new messageAdapter(getApplicationContext(),mChat);
recyclerView.setAdapter(adapter);