2016-04-27 3 views
-2

Я хочу получить намерение с булевым от второго действия до моего первого действия. Но теперь приложение проверяет намерение, и я получаю исключение нулевого указателя напрямую, как я могу пропустить первую проверку, которая происходит, и перейти ко второму действию, и оттуда отправить его обратно в первый, не получив исключения? Я получаю исключение по адресу:Получить намерение в первом действии

Boolean backButton=fromStartActivity.getExtras().getBoolean("backPress"); 

Некоторые из моего основного кода активность:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     /* Load the view and display it */ 
     setContentView(R.layout.activity_main); 
     Firebase.setAndroidContext(this); 

     Intent fromStartActivity = getIntent(); 
     Boolean backButton=fromStartActivity.getExtras().getBoolean("backPress"); 

     if(backButton){ 

      logout(); 
      Intent back = new Intent(Intent.ACTION_MAIN); 
      back.addCategory(Intent.CATEGORY_HOME); 
      back.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      //startActivity(back); 
      finish(); 
      System.exit(0); 
     } 

Вторая активность:

@Override 
    public void onBackPressed(){ 
     super.onBackPressed(); 


     backButton=true; 
     Intent fromBack = new Intent(StartActivity.this,MainActivity.class); 
     fromBack.putExtra("backPress",backButton); 
     startActivity(fromBack); 



    } 
+0

Вы внесли дополнительные непосредственно в намерения, но пытаетесь получить доступ с помощью комплекта намерений. Не использовать ackButton = fromStartActivity.getExtras(). GetBoolean ("backPress"); Использовать ackButton = fromStartActivity.getBoolean ("backPress"); – Pehlaj

+0

Какова первоначальная проблема, которую вы пытаетесь решить? потому что то, что вы хотите сделать, звучит не так. также вы можете getIntent.getBooleanExtra («backPress», false), чтобы получить false, если он не существует. – Ramin

+0

установить флаг для получения намерений. –

ответ

0

Вы поставили дополнительные прямо в намерениях, но при попытке получить доступ с помощью .

Попробуйте это .. Заменить следующий код

ackButton=fromStartActivity.getExtras().getBoolean("backPress"); 

с

ackButton=fromStartActivity.getBoolean("backPress"); 
2

Вы можете использовать

startActivityForResult(Intent, key) 

от вашей первой активности

И от выхода из системы деятельности, сделать

@Override 
    public void onBackPressed(){ 
     setResult(RESULT_OK, code); 
     finish(); 
    } 
1

Вы можете применить проверку перед тем, как данные от намерения

if(getIntent().getExtras().getBoolean("backPress")){ 
Intent fromStartActivity = getIntent(); 
     Boolean backButton=fromStartActivity.getExtras().getBoolean("backPress"); 

}else{ 
//do watever you want to do man 
} 
1

От вашего FirstActivity вызвать SecondActivity с помощью startActivityForResult() метод

Например:

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

В вашем SecondActivity задайте данные, которые вы хотите восстановить rn обратно в FirstActivity. Если вы не хотите возвращаться назад, не устанавливайте.

Например: В secondActivity если вы хотите послать назад данные:

Intent returnIntent = new Intent(); 
returnIntent.putBoolean("result",true); 
setResult(Activity.RESULT_OK,returnIntent); 
finish(); 

Если вы не хотите, чтобы вернуть данные:

Intent returnIntent = new Intent(); 
setResult(Activity.RESULT_CANCELED, returnIntent); 
finish(); 

Теперь в вашем FirstActivity класса писать следующий код для метод onActivityResult().

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     if(resultCode == Activity.RESULT_OK){ 
      Boolean result=data.getBoolean("result"); 
     } 
     if (resultCode == Activity.RESULT_CANCELED) { 
      //Write your code if there's no result 
     } 
    } 
}