onResume()之前调用onActivityResult()吗?

下面是我的应用程序的布局:

  1. onResume()用户被提示login
  2. 如果用户login,他可以继续使用应用程序3.如果用户随时登出,我想再次提示login

我怎样才能做到这一点?

这是我的MainActivity:

@Override protected void onResume(){ super.onResume(); isLoggedIn = prefs.getBoolean("isLoggedIn", false); if(!isLoggedIn){ showLoginActivity(); } } 

这是我的LoginActivity:

 @Override protected void onPostExecute(JSONObject json) { String authorized = "200"; String unauthorized = "401"; String notfound = "404"; String status = new String(); try { // Get the messages array JSONObject response = json.getJSONObject("response"); status = response.getString("status"); if(status.equals(authorized)){ Toast.makeText(getApplicationContext(), "You have been logged into the app!",Toast.LENGTH_SHORT).show(); prefs.edit().putBoolean("isLoggedIn",true); setResult(RESULT_OK, getIntent()); finish(); } else if (status.equals(unauthorized)){ Toast.makeText(getApplicationContext(), "The username and password you provided are incorrect!",Toast.LENGTH_SHORT).show(); prefs.edit().putBoolean("isLoggedIn",true); } else if(status.equals(notfound)){ Toast.makeText(getApplicationContext(), "Not found",Toast.LENGTH_SHORT).show(); prefs.edit().putBoolean("isLoggedIn",true); } } catch (JSONException e) { System.out.println(e); } catch (NullPointerException e) { System.out.println(e); } } } 

用户成功login后:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { Toast.makeText(getApplicationContext(), "BOOM SHAKA LAKA!",Toast.LENGTH_SHORT).show(); } } 

问题是,onResume()在onActivityResult()之前调用,所以当用户成功login时,我的主要活动不会得到通知,因为onResume()被首先调用。

哪里是最好的地方提示login?

对onActivityResult的调用实际上是在onResume之前发生的(请参阅文档 )。 您是否确定使用startActivityForResult启动了您想要的活动,并将所调用的活动的结果设置为RESULT_OK然后将值返回给您的活动? 尝试在您的onActivityResult放入一条Log语句来logging该值,并确保得到命中。 另外,您在哪里设置isLoggedIn首选项的值? 看起来你应该在你的login活动中将它设置为true ,然后再返回,但是这显然没有发生。

使用片段,在调用onResume()之前,调用onActivityResult()并不简单。 如果您正在返回的活动在此期间被处置,您将发现从onActivityResult()调用(例如) getActivity() onActivityResult()将返回null。 但是,如果活动尚未处理,则调用getActivity()将返回包含活动。

这种不一致可能是难以诊断的缺陷的来源,但您可以通过启用开发人员选项“不要保留活动”来检查应用程序的行为。 我倾向于保持这个打开 – 我宁愿在开发中看到一个NullPointerException比生产。

您可能需要考虑从活动中抽象出login状态。 例如,如果用户可以发表评论,让onPost操作pinglogin状态,并从那里,而不是从活动状态。