onResume()之前调用onActivityResult()吗?
下面是我的应用程序的布局:
- onResume()用户被提示login
- 如果用户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状态,并从那里,而不是从活动状态。