java - 带有 getActivity() 的 NullPointerException 且不确定如何执行 Intent

标签 java android android-intent

嗨,我是 Android 开发的初学者,所以我不太了解自己在做什么。我不断收到 nullpointerexecption,并且每当调用 getActivity() 时我的程序就会崩溃。这包括在 toast 消息中以及当我尝试有 Intent 地启动另一项 Activity 时。我也不完全确定如何使用 Intent ,所以如果可以解释那就太好了。

这是具有 getActivity() 调用和 Intent 的类:

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;

public class loginDialog extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.loginw)
                .setItems(R.array.account_types, new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog, int which){
                        if(which==0){
                            Toast.makeText(getActivity(),"todo",Toast.LENGTH_SHORT).show();
                        }else if(which==1){
                            Toast.makeText(getActivity(),"todo",Toast.LENGTH_SHORT).show();
                        }else if(which==2){
                            AlertDialog.Builder builder1=new AlertDialog.Builder(getActivity());
                            LayoutInflater inflater=getActivity().getLayoutInflater();
                            View view = inflater.inflate(R.layout.login_dialog,null);
                            builder1.setView(view);
                            builder1.setTitle("Login with Email Address");
                            builder1.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog1, int which) {
                                    //Toast.makeText(getActivity(), "Cancel", Toast.LENGTH_SHORT).show(); //Force Closes. Nullpointer Exception? Probably because of getActivity()
                                    //dialog1.dismiss();
                                }
                            });
                            builder1.setNeutralButton("Forgot Password",new DialogInterface.OnClickListener(){
                                @Override
                                public void onClick(DialogInterface dialog1, int which){
                                    dialog1.dismiss();
                                    AlertDialog.Builder builder2=new AlertDialog.Builder(getActivity());
                                    builder2.setTitle("Forgot Password");
                                    builder2.setMessage("Enter your Email Address");

                                    builder2.setPositiveButton("OK",new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            //TODO
                                        }
                                    });
                                    builder2.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            //TODO
                                        }
                                    });
                                    builder2.show();
                                }
                            });
                            builder1.setPositiveButton(R.string.login, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog1, int which) {
                                    //Toast.makeText(getActivity(),"Login complete",Toast.LENGTH_SHORT).show(); //Force Closes. Nullpointer Exception? Probably because of getActivity()
                                    dialog1.dismiss();

                                    Intent intent = new Intent(getActivity(),Groups.class);
                                    startActivity(intent);
                                }
                            });
                            Dialog dialog1 = builder1.create();
                            dialog1.show();
                        }
                    }
                });
        Dialog dialog=builder.create();
        return dialog;
    }
}

这是 logcat(请注意,这仅适用于 Intent 调用,因为其他 getActivity() 已被注释掉):

java.lang.NullPointerException
        at android.content.ComponentName.<init>(ComponentName.java:77)
        at android.content.Intent.<init>(Intent.java:3813)
        at com.app.u.loginDialog$1$3.onClick(loginDialog.java:67)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)

最佳答案

您应该在覆盖的dialogfragment 类中返回onActivityCreated 方法后调用getActivity。在你的例子中是loginDialog类。这是调用 getActivity 的安全位置

public class LoginDialog extends DialogFragment {
    Activity mAct; 

    @Override
    public void onAttach(Activity act) {
        super.onAttach(act);
        mAct = act; // use this mAct instead of getActivity() function
    }

关于java - 带有 getActivity() 的 NullPointerException 且不确定如何执行 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134782/

相关文章:

android - progressDialog 不在 onReceive 中关闭

适用于 HTC/摩托罗拉的 Android 模拟器

Android:从应用程序类启动新 Activity

java - Android:HTML 附件未通过电子邮件发送

Android 将数据从 EditText 传递到对话框的通知

Javascript 继续或取消提交按钮

java - 无法一次请求多个危险权限

java - 将 JSON 数组数据分组并计算是否有两个相同的值

java - 使用 CacheBuilder 的缓存作为 Map

android - 如何每次将动画旋转 90 度?