マイアプリケーションには、ログアウトボタンが付いたメニューがあり、アクティビティからログアウトすることができます。これはうまくいきました。それは、アプリケーションのようこそ画面にログアウトするために使用されましたが、私は最近、デバイスのホーム画面にログアウトするように変更しました。今、私がログアウトしてアプリを開くと、強制的に閉じます。 2回目のアプリケーションの起動時に、正しく起動します。アプリケーションの開始が間違っているアクティビティと強制終了
の最初の試みで、ユーザーがLogCatが正しい意思を開始することを示すにもかかわらず、ログアウトしたときに実行していた活動をロードしようとしているようだ:
08-13 17:14:18.983: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=uk.ac.ic.doc.vmw10.wherewolf/.activities.Welcome }
08-13 17:14:19.053: VERBOSE/WWA(8611): setting up
08-13 17:14:19.064: DEBUG/AndroidRuntime(8611): Shutting down VM
08-13 17:14:19.064: WARN/dalvikvm(8611): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-13 17:14:19.083: ERROR/AndroidRuntime(8611): FATAL EXCEPTION: main
08-13 17:14:19.083: ERROR/AndroidRuntime(8611): java.lang.RuntimeException: Unable to resume activity {uk.ac.ic.doc.vmw10.wherewolf/uk.ac.ic.doc.vmw10.wherewolf.activities.Tabs}: java.lang.NullPointerException
それが正しい意思を開始した直後は、間違ったアクティビティから冗長なメッセージが出力され、NullPointerExceptionのためにアプリケーションがクラッシュします。 インカムが主張しているように、ウェルカム活動を開始しないのはなぜですか?ここで
はログアウト機能です:
public void logout() {
SharedPreferences.Editor prefEditor = preferences.edit();
prefEditor.remove(PASSWORD);
prefEditor.remove(FIRST_NAME);
prefEditor.remove(LAST_NAME);
prefEditor.remove(EMAIL_ADDRESS);
prefEditor.remove(DATE);
prefEditor.remove(PICTURE);
prefEditor.remove(TOKEN);
prefEditor.commit();
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
syncTask.cancel(true);
dbHelper.close();
dbHelper=null;
firstRun = true;
startActivity(intent);
}
編集:ここではようこそ活動のためのonCreateメソッドです:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Log.v(TAG, "preferences: "+preferences.getAll());
if(preferences.contains(WhereWolfActivity.EMAIL_ADDRESS)) {
Log.v(TAG, "user preferences saved from previous session: "+preferences.getAll().toString());
intent = new Intent(getApplicationContext(), Tabs.class);
startActivity(intent);
finish();
}
else if(preferences.contains(WhereWolfActivity.USER_ID) &! preferences.contains(WhereWolfActivity.EMAIL_ADDRESS)) {
Log.v(TAG, "known user returning to log in");
intent = new Intent(getApplicationContext(), Login.class);
startActivity(intent);
finish();
}
else {
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.welcome);
}
}
編集:
だけでなく、それは始まっています間違ったアクティビティ、onCreateメソッドを呼び出さないoそのアクティビティはonStartを呼び出します。それは、私がやりたいことではないにしても、中断したところから拾い上げようとしていることを示唆しています!これをしないように私はどうすれば説得できますか?
編集:
すべての私は活動の彼らは継承スーパークラスを持って「ログイン」として、私は、ユーザーがログインしたかどうかをチェックすることをスーパークラスのONSTART()メソッドにビットを追加した場合、およびこれは働いていない
public void onStart() {
super.onStart();
if(!preferences.contains(EMAIL_ADDRESS)) {
Log.v(TAG, "not logged in");
Intent intent = new Intent(getApplicationContext(), Welcome.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
:ないそれは歓迎の活動を開始します。ここでLogCat出力です:
08-13 20:41:10.223: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=uk.ac.ic.doc.vmw10.wherewolf/.activities.Welcome }
08-13 20:41:10.254: VERBOSE/WWA(2171): not logged in
08-13 20:41:10.263: INFO/ActivityManager(59): Starting activity: Intent { flg=0x4000000 cmp=uk.ac.ic.doc.vmw10.wherewolf/.activities.Welcome }
08-13 20:41:10.273: VERBOSE/WWA(2171): setting up
08-13 20:41:10.320: DEBUG/AndroidRuntime(2171): Shutting down VM
08-13 20:41:10.320: WARN/dalvikvm(2171): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-13 20:41:10.343: ERROR/AndroidRuntime(2171): FATAL EXCEPTION: main
08-13 20:41:10.343: ERROR/AndroidRuntime(2171): java.lang.RuntimeException: Unable to resume activity {uk.ac.ic.doc.vmw10.wherewolf/uk.ac.ic.doc.vmw10.wherewolf.activities.Tabs}: java.lang.NullPointerException
スーパークラスは、タグWWAを持っています。ご覧のとおり、「ログインしていません」と表示された後、ウェルカムアクティビティが開始され、とにかく続行されます。何か案は?
ウェルカムアクティビティをロードするときに何をしているか(onStart()を実行してください) ))。値をロードしていますか? – Jack
完全な例外は興味深いものではありません。データベース接続のNPEだけですが、正しいアクティビティを開始していないため、明らかに再起動されていません。ウェルカムアクティビティのonCreateメソッドは、SharedPreferencesに応じて別のアクティビティにリダイレクトされますが、onCreateメソッドのLogCatステートメントは現れていないので、起動していません。あなたが見ることができるように私の質問にそのメソッドを追加しました – Pikaling