сбой приложения при нажатии диалогового окна - PullRequest
0 голосов
/ 04 июля 2019

Я создал диалог предупреждения в фрагменте. Он показывает, когда пользователь щелкает по представлению элемента, и когда кто-то щелкает по опции диалогового окна оповещения, происходит сбой приложения. Проблема возникает только тогда, когда вы выполняете действие для firebase, но действие завершено успешно Я проверил его, чтобы сделать тост и открыть другие действия, он работает нормально. Как я могу удалить это?

userDbRef.child(userID).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            final String user_name = dataSnapshot.child("user_name").getValue().toString();
                            String pic = dataSnapshot.child("user_image").getValue().toString();
                            String user_status = dataSnapshot.child("user_status").getValue().toString();

                            holder.name.setText(user_name);
                            holder.status.setText(user_status);
                            Picasso.get().load(pic).networkPolicy(NetworkPolicy.OFFLINE)
                                    .placeholder(R.drawable.default_profile_image)
                                    .into(holder.imageView);

                            holder.itemView.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(final View v) {

                                    CharSequence options[] = new CharSequence[]{"Accept Request", "Cancel Request"};
                                    final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

                                    builder.setItems(options, new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            if (which == 0){
                                                acceptRequest(userID);

                                            }
                                            else if (which == 1){
                                                cancelRequest(userID,dialog);
                                            }
                                        }
                                    });
                                    builder.show();
                                }
                            });
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    });

private void cancelRequest(final String uid, final DialogInterface dialog) {

    friendReqDbRef.child(uid).child(currentUser_uid).removeValue()
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()){
                    }
                }

            });

}

1 Ответ

0 голосов
/ 04 июля 2019

Лучший способ сделать AlertDialog, просто добавить этот код рядом с прослушивателем кликов holder.itemView.

Если этот ответ сработал, пожалуйста, примите. Спасибо.

            // Build an AlertDialog
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

            // Set a title for alert dialog
            builder.setTitle("Dialog Title");

            // Ask the final question
            builder.setMessage("Dialog Description");

            // Set click listener for alert dialog buttons
            DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch(which){
                        case DialogInterface.BUTTON_POSITIVE:
                            // User clicked the Accept button
                            acceptRequest(userID);
                            break;

                        case DialogInterface.BUTTON_NEGATIVE:
                            // User clicked the Cancel button
                            cancelRequest(userID,dialog);
                            break;
                    }
                }
            };

            // Set the alert dialog yes button click listener
            builder.setPositiveButton("Accept Request", dialogClickListener);

            // Set the alert dialog no button click listener
            builder.setNegativeButton("Cancel Request",dialogClickListener);

            AlertDialog dialog = builder.create();
            // Display the alert dialog on interface
            dialog.show();
...