Java 启动应用程序调用后,RecyclerView中的项重复

Java 启动应用程序调用后,RecyclerView中的项重复,java,android,Java,Android,每次应用程序被销毁并再次打开时,也就是每次调用“onStart”方法时,每个新项都会添加两次。 当我关闭并再次打开它时,每个新项目都会重复三次,以此类推 以下是活动的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat);

每次应用程序被销毁并再次打开时,也就是每次调用“onStart”方法时,每个新项都会添加两次。 当我关闭并再次打开它时,每个新项目都会重复三次,以此类推

以下是活动的代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        IntializeControllers();
        if (getIntent().getExtras() != null && getIntent().getStringExtra("userID" ) != null&& getIntent().getStringExtra("userName") != null&& getIntent().getStringExtra("userImage") != null){
            messageReceiverID = getIntent().getExtras().get("userID").toString();
            if (messageReceiverID.equals(auth.getCurrentUser().getUid())){
                Toast.makeText(this, "يرجى التأكد من إعدادات تسجيل الدخول", Toast.LENGTH_SHORT).show();
                finish();
            }
            messageReceiverName = getIntent().getExtras().get("userName").toString();
            messageReceiverImage = getIntent().getExtras().get("userImage").toString();
        }
        else {
            Toast.makeText(this, "لا يوجد بيانات", Toast.LENGTH_SHORT).show();
            finish();
        }
        DisplayLastSeen();
        userName.setText(messageReceiverName);
        Picasso.get().load(messageReceiverImage).placeholder(R.drawable.profile_image).into(userImage);
        SendMessageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendMessage();
                MessageInputText.setText("");
            }
        });
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                   mCurrentPage++;
                   itemPos =0;
                   LoadMoreMessages();
            }
        });
        sendFileButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CharSequence options[] = new CharSequence[]
                        {
                                "Images",
                                "PDF Files",
                                "Ms Word Files"
                        };
                AlertDialog.Builder builder = new AlertDialog.Builder(ChatActivity.this);
                builder.setTitle("Select the File");
                builder.setItems(options, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int i) {
                        if (i == 0){
                            checker ="image";
                            Intent intent = new Intent();
                            intent.setType("image/*");
                            intent.setAction(Intent.ACTION_GET_CONTENT);
                            startActivityForResult(Intent.createChooser(intent,"Select Image"),438);
                        }if (i == 1){
                            checker ="pdf";
                            Intent intent = new Intent();
                            intent.setType("application/pdf");
                            intent.setAction(Intent.ACTION_GET_CONTENT);
                            startActivityForResult(Intent.createChooser(intent,"Select PDF File"),438);
                        }if (i == 2){
                            checker ="docx";
                            Intent intent = new Intent();
                            intent.setType("application/msword");
                            intent.setAction(Intent.ACTION_GET_CONTENT);
                            startActivityForResult(Intent.createChooser(intent,"Select Ms Word File"),438);
                        }
                    }
                });
                builder.show();
            }
        });
        seenListener =null;
    }

    @Override
    protected void onStart() {
        super.onStart();
        LoadMessages();
        callImage.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               sheckSelfPermissionsAndCallUser();
           }
       });
        Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show();
    }

 private void IntializeControllers() {
        toolbar = findViewById(R.id.group_chat_toolbar);
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setDisplayShowCustomEnabled(true);


            LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
            View actionBarView = layoutInflater.inflate(R.layout.custom_chat_bar, null);
            actionBar.setCustomView(actionBarView);
        }

        auth = FirebaseAuth.getInstance();
        messageSenderID = auth.getCurrentUser().getUid();
        RootRef = FirebaseDatabase.getInstance().getReference();
        callImage = findViewById(R.id.custom_user_call);
        userImage = findViewById(R.id.custom_profile_image);
        userName = findViewById(R.id.custom_profile_name);
        userLastSeen = findViewById(R.id.custom_user_last_seen);
        SendMessageButton = findViewById(R.id.send_message_btn);
        MessageInputText = findViewById(R.id.input_message);
        recyclerView = findViewById(R.id.private_messages_list_of_users);
        swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);
        sendFileButton = findViewById(R.id.send_files_btn);
        progressDialog = new ProgressDialog(ChatActivity.this);

        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setHasFixedSize(true);

        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat currentDate = new SimpleDateFormat("MMM dd, yyyy");
        saveCurrentDate =currentDate.format(calendar.getTime());

        SimpleDateFormat currentTime = new SimpleDateFormat("hh:mm a");
        saveCurrentTime =currentTime.format(calendar.getTime());

        FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        sinchClient = Sinch.getSinchClientBuilder()
                .context(this)
                .applicationKey("b3ecda78-59b0-400e-91bb-53f14fc1efc1")
                .applicationSecret("pi0eQwXOzEGP7Crsk8Zepw==")
                .environmentHost("clientapi.sinch.com")
                .userId(firebaseUser.getUid())
                .build();

        sinchClient.setSupportCalling(true);
        sinchClient.startListeningOnActiveConnection();
        sinchClient.start();
        callImage.setVisibility(View.VISIBLE);
        userLastSeen.setVisibility(View.VISIBLE);

        sinchClient.getCallClient().addCallClientListener(new CallClientListener() {
            @Override
            public void onIncomingCall(CallClient callClient, final com.sinch.android.rtc.calling.Call calli) {
                 alertDialog  = new AlertDialog.Builder(ChatActivity.this).create();
                alertDialog.setTitle("وردتك مكالمة من قبل " + messageReceiverName);
                alertDialog.setCanceledOnTouchOutside(false);
                alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "رفض", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        alertDialog.dismiss();
                        call.hangup();
                    }
                });
                alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "قبول", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        call = calli;
                        call.answer();
                        call.addCallListener(new sinchCallListenr());
                        Toast.makeText(ChatActivity.this, "Calling is Start", Toast.LENGTH_SHORT).show();
                    }
                });
                alertDialog.show();
            }
        });
       apiService = Client.getClient("https://fcm.googleapis.com/").create(APIService.class);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 438 && resultCode == RESULT_OK && data != null && data.getData() != null){

            progressDialog.setTitle("Sending File");
            progressDialog.setMessage("please wait, we are sending that file...");
            progressDialog.setCanceledOnTouchOutside(false);
            progressDialog.show();
          fileUri = data.getData();

          if (!checker.equals("image")){
              StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("Document Files");

              final String messageSenderRef = "Messages/" + messageSenderID +"/" + messageReceiverID;
              final String messageReceiverRef = "Messages/" + messageReceiverID + "/" +messageSenderID;

              DatabaseReference userMessageKeyRef = RootRef.child("Messages")
                      .child(messageSenderID).child(messageReceiverID).push();

              final String messagePushID =userMessageKeyRef.getKey();

              final StorageReference filePath =storageReference.child(messagePushID +"."+checker);

              filePath.putFile(fileUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                  @Override
                  public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                      if (task.isSuccessful()){
                          filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                              @Override
                              public void onSuccess(Uri uri) {
                                  final String downloadUrl = uri.toString();
                                  myUrl = downloadUrl;
                                  notify = true;
                                  Map messageTextBody = new HashMap();
                                  messageTextBody.put("message",myUrl);
                                  messageTextBody.put("name", Objects.requireNonNull(fileUri.getLastPathSegment()));
                                  messageTextBody.put("type",checker);
                                  messageTextBody.put("from",messageSenderID);
                                  messageTextBody.put("to",messageReceiverID);
                                  messageTextBody.put("seenMessage",false);
                                  messageTextBody.put("messageID",messagePushID);
                                  messageTextBody.put("time",saveCurrentTime);
                                  messageTextBody.put("date",saveCurrentDate);

                                  Map messageBodyDetails = new HashMap();
                                  messageBodyDetails.put(messageSenderRef 
+"/" +messagePushID, messageTextBody);

messageBodyDetails.put(messageReceiverRef +"/" +messagePushID, 
messageTextBody);   RootRef.updateChildren(messageBodyDetails);
                                  progressDialog.dismiss();
                                  if (notify) {
                                     // 
sendNotification(messageReceiverID, GetNameUser(), myUrl, checker);
                                  }
                                  notify = false;
                              }
                          });
                      }
                  }
              }).addOnFailureListener(new OnFailureListener() {
                  @Override
                  public void onFailure(@NonNull Exception e) {
                      progressDialog.dismiss();
                      Toast.makeText(ChatActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                  }
              }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                  @Override
                  public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                      double p = (100.0*taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount();
                      progressDialog.setMessage((int) p +" % Uploading....");
                  }
              });
          }else if (checker.equals("image")){
              StorageReference storageReference = FirebaseStorage.getInstance().getReference().child("Image Files");

              final String messageSenderRef = "Messages/" + messageSenderID +"/" + messageReceiverID;
              final String messageReceiverRef = "Messages/" + messageReceiverID + "/" +messageSenderID;

              DatabaseReference userMessageKeyRef = RootRef.child("Messages")
                      .child(messageSenderID).child(messageReceiverID).push();

              final String messagePushID =userMessageKeyRef.getKey();

              final StorageReference filePath =storageReference.child(messagePushID +".jpg");
              uploadTask = filePath.putFile(fileUri);
              uploadTask.continueWithTask(new Continuation() {
                  @Override
                  public Object then(@NonNull Task task){

                      if (!task.isSuccessful()){
                          Toast.makeText(ChatActivity.this, ""+task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                      }
                      return filePath.getDownloadUrl();
                  }
              }).addOnCompleteListener(new OnCompleteListener<Uri>(){
                  @Override
                  public void onComplete(@NonNull Task<Uri> task) {
                      if (task.isSuccessful()){
                          Uri downloadUri = task.getResult();
                          myUrl = downloadUri.toString();

                          Map messageTextBody = new HashMap();
                          messageTextBody.put("message",myUrl);
                          messageTextBody.put("name",fileUri.getLastPathSegment());
                          messageTextBody.put("type",checker);
                          messageTextBody.put("from",messageSenderID);
                          messageTextBody.put("to",messageReceiverID);
                          messageTextBody.put("seenMessage",false);
                          messageTextBody.put("messageID",messagePushID);
                          messageTextBody.put("time",saveCurrentTime);
                          messageTextBody.put("date",saveCurrentDate);

                          Map messageBodyDetails = new HashMap();
                          messageBodyDetails.put(messageSenderRef +"/" +messagePushID, messageTextBody);
                          messageBodyDetails.put(messageReceiverRef +"/" +messagePushID, messageTextBody);


                          RootRef.updateChildren(messageBodyDetails).addOnCompleteListener(new OnCompleteListener() {
                              @Override
                               public void onComplete(@NonNull Task task) {
                                  if (task.isSuccessful()) {
                                      notify=true;
                                      //messageAdapter.notifyDataSetChanged();
                                      progressDialog.dismiss();
                                      Toast.makeText(ChatActivity.this, "Message Sent Successfully", Toast.LENGTH_SHORT).show();
                                      if (notify) {
                                         sendNotification(messageReceiverID, GetNameUser(), myUrl, checker);
                                      }
                                      notify = false;
                                  }else {
                                      progressDialog.dismiss();
                                      Toast.makeText(ChatActivity.this, "Error : "+task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                                  }
                              }

                          });
                      }
                  }
              });
          }else {
              Toast.makeText(this, "Nothing Selected, Error.", Toast.LENGTH_SHORT).show();
              progressDialog.dismiss();
          }
        }
    }


    @Override
    protected void onResume() {
        Log.d("tester","onResume");

        super.onResume();
        //move recycler from here
        messageAdapter =new MessageAdapter(messagesList,ChatActivity.this,messageReceiverImage);
        recyclerView.setAdapter(messageAdapter);
        ItemTouchHelper itemTouchHelper = new
                ItemTouchHelper(new SwipeToDeleteCallback(messageAdapter));
        itemTouchHelper.attachToRecyclerView(recyclerView);
        recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount());
        seenMessage();
        UpdateUserStatus("online");
        DisplayLastSeen();
        messageAdapter.notifyDataSetChanged();
    //    messagesListAdapter = new MessagesListAdapter(messagesList,messageReceiverImage);
  //      recyclerView.setAdapter(messagesListAdapter);
    }
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("tester","onStop");
        FirebaseUser  firebaseUser = auth.getCurrentUser();
        if (firebaseUser != null){
            UpdateUserStatus("offline");
           RootRef.removeEventListener(seenListener);
            RootRef.removeEventListener(listener);
        }
    }

    @Override
    protected void onDestroy() {
        Log.d("tester","onDestroy");
        super.onDestroy();
        FirebaseUser  firebaseUser = auth.getCurrentUser();
        if (firebaseUser != null){
            UpdateUserStatus("offline");
            if (seenListener != null) {
                RootRef.removeEventListener(seenListener);
            }
        }
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u chat);
初始化控制器();
如果(getIntent().getExtras()!=null&&getIntent().getStringExtra(“用户ID”)!=null&&getIntent().getStringExtra(“用户名”)!=null&&getIntent().getStringExtra(“用户图像”)!=null){
messageReceiverID=getIntent().getExtras().get(“userID”).toString();
if(messageReceiverID.equals(auth.getCurrentUser().getUid())){
Toast.makeText(这是“Toast.LENGTH.”show();
完成();
}
messageReceiverName=getIntent().getExtras().get(“用户名”).toString();
messageReceiverImage=getIntent().getExtras().get(“userImage”).toString();
}
否则{
Toast.makeText(这是“Toast.LENGTH”show();
完成();
}
DisplayLastSeen();
userName.setText(messageReceiverName);
Picasso.get().load(messageReceiverImage).placeholder(R.drawable.profile\u image).into(userImage);
SendMessageButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
sendMessage();
MessageInputText.setText(“”);
}
});
swipeRefreshLayout.setOnRefreshListener(新的swipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
mCurrentPage++;
itemPos=0;
LoadMoreMessages();
}
});
sendFileButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
CharSequence选项[]=新的CharSequence[]
{
“图像”,
“PDF文件”,
“Ms Word文件”
};
AlertDialog.Builder=新建AlertDialog.Builder(ChatActivity.this);
setTitle(“选择文件”);
setItems(选项,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口对话框,int i){
如果(i==0){
checker=“image”;
意图=新意图();
intent.setType(“image/*”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(Intent,“选择图像”),438;
}如果(i==1){
checker=“pdf”;
意图=新意图();
intent.setType(“application/pdf”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(Intent,“选择PDF文件”),438);
}如果(i==2){
checker=“docx”;
意图=新意图();
intent.setType(“应用程序/msword”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(Intent,“选择Ms Word文件”),438);
}
}
});
builder.show();
}
});
seenListener=null;
}
@凌驾
受保护的void onStart(){
super.onStart();
LoadMessages();
callImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
SheckSelf许可证和Calluser();
}
});
Toast.makeText(这是“onStart”,Toast.LENGTH_SHORT).show();
}
私有无效初始化控制器(){
工具栏=findViewById(R.id.group\u chat\u工具栏);
设置支持操作栏(工具栏);
ActionBar ActionBar=getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
LayoutInflater LayoutInflater=(LayoutInflater)this.getSystemService(getApplicationContext().LAYOUT\u充气机\u服务);
View actionBarView=LayoutFlater.充气(R.layout.custom\u chat\u bar,空);
actionBar.setCustomView(actionBarView);
}
auth=FirebaseAuth.getInstance();
messageSenderID=auth.getCurrentUser().getUid();
RootRef=FirebaseDatabase.getInstance().getReference();
callImage=findviewbyd(R.id.custom\u user\u调用);
userImage=findviewbyd(R.id.custom\u profile\u image);
用户名=findViewById(R.id.custom\u profile\u name);
userLastSeen=findViewById(R.id.custom\u user\u last\u-seen);
SendMessageButton=findViewById(R.id.send\u message\u btn);
MessageInputText=findviewbyd(R.id.input\u message);
recyclerView=findViewById(R.id.private\u messages\u list\u用户);
swipeRefreshLayout=findViewById(R.id.swipeRefreshLayout);
sendFileButton=findviewbyd(R.id.send\u files\u btn);
progressDialog=新建progressDialog(ChatActivity.this);
linearLayoutManager=新的linearLayoutManager(此);
recyclerView.setLayoutMana
// When adding new data
adapter.addAll(data);
adapter.notifyDataSetChanged();

// when updating data again in onResume or onStart
adapter.clear();// clear old data from list
adapter.addAll(data);
adapter.notifyDataSetChanged();

//Inside adapter
//Adding item
void addAll(List<Data> data){
list.addAll(data);
}

//For clearing list
void clear(){
list.clear();
// To update list automatically add below line
//notifyDataSetChanged();
}