Вызывается ли 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
в развитии, чем в производстве.