DialogFragment 在调用 show()

问题描述

我想在 Fragment 中显示一个简单的 DialogFragment,但每次调用 show() 方法时它都会崩溃。

它要么崩溃回到 MainActivity,要么向我抛出一个 NullPointer 异常,该异常似乎与崩溃没有直接关系。我认为 Logcat 以某种方式解决了实际问题。

这是调用和 DialogFragment 子类:

private void showCheatingDialog() {
    DialogFragment newFragment = new CheatingDialogFragment();
    newFragment.show(getChildFragmentManager(),"CheatingDialogFragment");
}

@Override
public void onCheatingPositiveClick(DialogFragment dialog) {
    try {
        client.puzzleDone(BLUFF);
    } catch(IOException ex) {
        Log.e("tiles",ex.toString());
        Toast.makeText(getActivity(),"Connection to the server failed",Toast.LENGTH_LONG).show();
        Intent intent = new Intent(getActivity(),MainActivity.class);
        startActivity(intent);
    }
}

@Override
public void onCheatingCancelClick(DialogFragment dialog) {
    // do nothing
}

public class CheatingDialogFragment extends DialogFragment {

    public interface CheatingDialogListener {
        public void onCheatingPositiveClick(DialogFragment dialog);
        public void onCheatingCancelClick(DialogFragment dialog);
    }

    CheatingDialogListener listener;

    // Override the Fragment.onAttach() method to instantiate the CheatingDialogListener
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        // Verify that the host activity implements the callback interface
        try {
            // Instantiate the CheatingDialogListener so we can send events to the host
            listener = (CheatingDialogListener) context;
        } catch (ClassCastException e) {
            // The activity doesn't implement the interface,throw exception
            throw new ClassCastException(getActivity().toString()
                    + " must implement CheatingDialogListener");
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Build the dialog and set up the button click handlers
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.cheating_dialog_fragment)
                .setPositiveButton(R.string.cheating_dialog_positive,new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int id) {
                        // Send the positive button event back to the host activity
                        listener.onCheatingPositiveClick(CheatingDialogFragment.this);
                    }
                })
                .setNegativeButton(R.string.cheating_dialog_cancel,int id) {
                        // Send the negative button event back to the host activity
                        listener.onCheatingCancelClick(CheatingDialogFragment.this);
                    }
                });
        return builder.create();
    }
}

这是 Logcat 显示的异常:

2021-06-17 08:45:04.952 7095-7095/com.example.se2_gruppenphase_ss21 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.se2_gruppenphase_ss21,PID: 7095
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.se2_gruppenphase_ss21.networking.AvailableRoom.getName()' on a null object reference
    at com.example.se2_gruppenphase_ss21.menu.RoomFragment.onCreateView(RoomFragment.java:86)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
    at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
    at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
    at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
    at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
    at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
    at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435)
    at android.app.Activity.performStart(Activity.java:8024)
    at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475)
    at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
    at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)