Android:在意图另一个活动之前销毁活动

Yoh*_* AI 1 android android-intent

我的 android 应用程序中有两个活动:
1. LoginActivity :用户可以使用密码和电子邮件以访客身份登录为会员
2. MainActivity :在地图上显示用户当前位置

场景:
1.用户登录为客人
2.转到主要活动担任嘉宾。(这里没有 NPE)
3. 用户采取了一些需要登录的操作
4. 意图登录活动
5. 我需要在将用户引导到 LoginActivity 之前销毁 MainActivity
6. 用户在 LoginActivity 上输入用户名和密码
7. 如果用户存在并且密码为 true 去到 MainActivity
8. NPE(或空指针异常)发生在这里。

因此,就我而言,我需要在将用户引导至 LoginActivity 之前销毁 MainActivity(第 5 点)。我试过这个:

final AlertDialog.Builder builder = new AlertDialog.Builder(context);

final String message = getResources().getString(R.string.NCI);

builder.setMessage(Html.fromHtml("To do your action, we need you to logged in our server"))
.setTitle("LOGIN REQUIRED")
.setPositiveButton("OK",
    new OnClickListener(){
        public void onClick(DialogInterface d, int id){                         
            Intent i = new Intent(MainActivity.this, LoginActivity.class);

            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            finish();
        }
    }
);

builder.create().show();
Run Code Online (Sandbox Code Playgroud)

原木猫

07-25 16:04:27.287: E/AndroidRuntime(19823): FATAL EXCEPTION: main
07-25 16:04:27.287: E/AndroidRuntime(19823): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yai.properti.tujuh.tujuh.tujuh/com.yai.properti.tujuh.tujuh.tujuh.MainActivity}: java.lang.NullPointerException
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.os.Looper.loop(Looper.java:137)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.ActivityThread.main(ActivityThread.java:4895)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at java.lang.reflect.Method.invokeNative(Native Method)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at java.lang.reflect.Method.invoke(Method.java:511)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at dalvik.system.NativeStart.main(Native Method)
07-25 16:04:27.287: E/AndroidRuntime(19823): Caused by: java.lang.NullPointerException
07-25 16:04:27.287: E/AndroidRuntime(19823):    at com.yai.properti.tujuh.tujuh.tujuh.MainActivity.onCreate(MainActivity.java:817)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.Activity.performCreate(Activity.java:5163)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
07-25 16:04:27.287: E/AndroidRuntime(19823):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
07-25 16:04:27.287: E/AndroidRuntime(19823):    ... 11 more
Run Code Online (Sandbox Code Playgroud)

我已经通过替换 finish() 调用方法尝试过 onDestroy(),但 NPE(空指针异常)仍然发生。作为对 MainActivity 的第一次意图,NPE 没有发生。

我想要什么is start MainActivity as the first time。我怎么能那样做?

非常感谢。

Jay*_*iya 8

我认为几乎没有概念问题实际上 FLAG_ACTIVITY_CLEAR_TOP 标志是使用在这里检查:http : //developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP所以在这种情况下不需要完成()方法它已删除 mainActivity 类,但根据文档,您必须在意图中再添加一个标志 FLAG_ACTIVITY_NEW_TASK。

所以更换

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
Run Code Online (Sandbox Code Playgroud)

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

就是这样...