Сообщение Toast не показывает никаких сообщений - PullRequest
1 голос
/ 06 августа 2020
• 1000 Диалог обратной связи. java
public class FeedBackDialog extends DialogFragment implements View.OnClickListener {


    private static final String TAG = "Feedback";

    public EditText fname,fmobile,faddress, fmessage;
    public Button fsubmit , fcancel;
    private ImainActivity imainActivity;


    @Override
    public void onClick(View v) {

        switch (v.getId ()){
            case R.id.fsubmit:{
                String name= fname.getText ().toString ();
                String mobile= fname.getText ().toString ();
                String address= fname.getText ().toString ();
                String message = fmessage.getText ().toString ();
                if(!name.equals ( "" ) && !mobile.equals ( "" ) && !address.equals ( "" ) && !message.equals ( "" )){
                   ImainActivity imainActivity = new ImainActivity ( ) {
                       @Override
                       public void createNewFeedback(String name, String mobile, String address, String message) {
                           FirebaseFirestore db = FirebaseFirestore.getInstance ();

                           DocumentReference feedbackDocRef= db.collection ( "FeedBacks" ).document ();


                           String userId = FirebaseAuth.getInstance ().getCurrentUser ().getUid ();

                           FeedbackData feedbackData = new FeedbackData (  );
                           feedbackData.setFname ( name );
                           feedbackData.setFmobile ( mobile );
                           feedbackData.setFaddress ( address );
                           feedbackData.setFmessage ( message );
                           Date timestamp = null;
                           feedbackData.setTimestamp ( timestamp );
                           feedbackData.setUserid(userId);


                           feedbackDocRef.set ( feedbackData ).addOnCompleteListener ( new OnCompleteListener <Void> ( ) {
                               @Override
                               public void onComplete(@NonNull Task <Void> task) {
                                   if(task.isSuccessful ()){

                                       Toast.makeText ( getApplicationContext(), "Feedback Send Successfully!", Toast.LENGTH_SHORT ).show ( );

                                   }else{
                                       Toast.makeText ( getApplicationContext(), "Feedback didn't Send.", Toast.LENGTH_SHORT ).show ( );

                                   }

                               }
                           } ).addOnFailureListener ( new OnFailureListener ( ) {
                               @Override
                               public void onFailure(@NonNull Exception e) {
                                   }
                           } );
                       }
                   };
                   imainActivity.createNewFeedback ( name,mobile,address,message );

                    getDialog ().dismiss ();

                }else{
                    Toast.makeText ( getActivity (), "Enter All Fields...", Toast.LENGTH_SHORT ).show ( );
                }break;
            }
            case R.id.fcancel:{
                getDialog ().dismiss ();
                break;
            }
            case R.id.btn_close:{
                getDialog ().dismiss ();
                break;
            }
            default:
                throw new IllegalStateException ( "Unexpected value: " + v.getId ( ) );
        }
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach ( context );
        imainActivity = (ImainActivity) getActivity ();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );

        int style = DialogFragment.STYLE_NO_TITLE;
        int theme = android.R.style.Theme_Holo_Light_Dialog;
        setStyle ( style,theme );
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_feedback, container, false);
        fname = view.findViewById(R.id.fname);
        fmobile = view.findViewById ( R.id.fmobile );
        faddress = view.findViewById ( R.id.faddress );
        fmessage = view.findViewById(R.id.fmessage);
        fsubmit = view.findViewById(R.id.fsubmit);
        fcancel = view.findViewById(R.id.fcancel);

        fcancel.setOnClickListener(this);
        fsubmit.setOnClickListener(this);

        getDialog().setTitle("Feedback");

        return view;
    }
}

Ответы [ 4 ]

1 голос
/ 07 августа 2020

Toast - это своего рода изменение пользовательского интерфейса, поэтому вы не можете вызывать его из рабочих потоков, как в вашем случае обратные вызовы Firebase, поэтому вам нужно запускать его явно в пользовательском интерфейсе / основном потоке.

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(requireActivity(), "My Toast", Toast.LENGTH_SHORT).show();
    }
});

ОБНОВЛЕНИЕ

Если выше не работает, попробуйте ниже

private void showToast() {
    Handler handler = new Handler(Looper.getMainLooper());
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(mContext, "My Toast", Toast.LENGTH_SHORT).show();
        }
    }, 1000 );
}   
0 голосов
/ 06 августа 2020

Попробуйте использовать feedbackDocRef.addOnSuccessListener() {...} вместо feedbackDocRef.addOnCompleteListener(){...} и удалите проверку на успешное выполнение задачи, т.е. if(task.isSuccessful(){...}

0 голосов
/ 07 августа 2020

Поскольку под-события в Toast-сообщении нет сообщения для разрешения,

Попробуйте использовать 'await' с событиями

try {
    // Block on a task and get the result synchronously. This is generally done
    // when executing a task inside a separately managed background thread. Doing this
    // on the main (UI) thread can cause your application to become unresponsive.
    AuthResult authResult = Tasks.await(task);
} catch (ExecutionException e) {
    // The Task failed, this is the same exception you'd get in a non-blocking
    // failure handler.
    // ...
} catch (InterruptedException e) {
    // An interrupt occurred while waiting for the task to complete.
    // ...
}
0 голосов
/ 06 августа 2020

Попробуйте изменить:

Toast.makeText ( getApplicationContext() ...

Кому:

Toast.makeText ( getActivity()....
...