Вызывается ли onResume () перед onActivityResult ()?
вот как мое приложение выкладывали:
- onResume () пользователю предлагается войти
- если пользователь входит в систему, он может продолжать использовать приложение 3. Если пользователь выходит из системы в любое время, я хочу снова запросить вход
как я могу добиться этого?
вот мой класс 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);
}
}
}
после успешного входа пользователя в систему в:
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() поэтому, когда пользователь успешно вошел в систему, моя основная деятельность не получает уведомления, потому что onResume () вызывается первым.
где лучше всего запрашивать логин?
3 ответа:
вызов onActivityResult происходит до onResume, на самом деле (см. документы). Вы уверены, что вы на самом деле начинаете деятельность, которую вы хотели с
startActivityForResultи что вы в результате вызванного деятельностиRESULT_OKперед возвращением значения в вашу деятельность? Попробуйте просто поставитьLogзаявление вonActivityResultдля регистрации этого значения и убедитесь, что он попадает. Кроме того, где вы устанавливаете значениеisLoggedInпредпочтения? Кажется, что вы должны быть настройки что доtrueв вашей активности входа, прежде чем он вернется в любом случае, но это явно не происходит.
С фрагментами это даже не так просто, как
onActivityResult()вызывается перед вызовомonResume(). Если действие, к которому вы возвращаетесь, было удалено в промежутке времени, вы обнаружите, что вызовы (например)getActivity()СonActivityResult()вернет null. Однако, если действие не было удалено, вызовитеgetActivity()вернет содержащее действие.это несоответствие может быть источником трудно диагностировать дефекты, но вы можете проверить поведение вашего приложение, включив опцию разработчика "не сохранять действия". Я, как правило, держать это включено - я бы предпочел видеть
NullPointerExceptionв развитии, чем в производстве.