簡體   English   中英

Android:在進行其他活動之前先銷毀活動

[英]Android : destroy activity before intent to another activity

我的Android應用程序中有兩個活動:
1. LoginActivity:用戶可以使用密碼和電子郵件以會員身份以訪客身份登錄
2. MainActivity:在地圖上顯示用戶當前位置

場景:
1.用戶以訪客身份登錄
2.以訪客身份進入主活動。 (這里沒有NPE)
3.用戶采取了一些需要登錄的操作
4.意向登錄活動
5.在將用戶定向到LoginActivity之前,我需要銷毀MainActivity
6.用戶在LoginActivity上輸入用戶名和密碼
7.如果用戶存在且密碼為true,請轉到MainActivity。
8.這里發生了NPE(或Null Pointer Exception)。

因此,就我而言,在將用戶定向到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();

原木貓

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

我已經嘗試通過替換finish()調用方法來嘗試onDestroy(),但是仍然發生NPE(空指針異常)。 作為MainActivity的首次意圖,NPE並未發生。

我想要的is start MainActivity as the first time 我該怎么做?

非常感謝。

我認為幾乎沒有概念上的問題實際上FLAG_ACTIVITY_CLEAR_TOP標志是Use,請在此處進行檢查: http : //developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP,因此在這種情況下,不需要finish()方法已經刪除了mainActivity類,但是根據文檔,您必須向意圖中再添加一個FLAG_ACTIVITY_NEW_TASK標志。

所以更換

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();

Intent i = new Intent(MainActivity.this, LoginActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

而已...

每當您需要調用finish()以完成anonymous inner class某些活動finish()如您在上面的代碼中所做的那樣)時,只需傳遞完整活動的名稱(您要銷毀的名稱),例如MainActivity.this.finish() 。 (其中MainActivity是您要銷毀的那個)

創建一個靜態活動對象,該活動在其他活動上完成並在其中分配活動,即您可以添加更多活動

public class demoActivity extends AppCompatActivity {
    public static Activity self_intent;
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.demo_activity);
            selfintent=this;
    } 

   //Other functions--------------
} 

對其他活動也一樣

在其他

activityCloseBtn= (Button) view.findViewById(R.id.activity_close_btn);
activityCloseBtn.setOnClickListener(new View.OnClickListener() {      
       @Override
       public void onClick(View v) {
          demoActivity.selfintent.finish(); //for finish demoActivityactivity

          //for other activities Activity.selfintent.finish();
          finish();  //for finish current activity
      }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM