2017-11-11 28 views
-1

私はMainActivity - > StoriesActivity - > StoryBodyActivityに行くフローを持っています。戻るボタンはNullPointerExceptionをスローします

それぞれは、インテントを使用して変数を次の変数に渡します。

StoryBodyActivityからStoriesActivityに戻るボタンを実装しようとしていますが、StoriesActivityのauthorID = extras.getInt("author_id");にNullPointerExceptionがスローされています。

私はNullPointerが何であるか知っています。私はちょうどこれを修正する方法を知らない! MainActivityから渡されたデータにアクセスできなくなった可能性がありますか?

注:これは、アクションバーのアイコンではなく、デバイスの戻るボタンをクリックするとうまく動作します。 StoryBodyActivityから

スニペット:MainActivityから

private int authorID; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_stories); 

     Bundle extras = getIntent().getExtras(); 

     authorID = extras.getInt("author_id"); // NullPointerException here 
     final String authorName = extras.getString("author_name"); 
     Log.i("click", Integer.toString(authorID)); 
} 

スニペット:StoriesActivityから

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_story_body); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
} 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      // Respond to the action bar's Up/Home button 
      case android.R.id.home: 
       NavUtils.navigateUpFromSameTask(this); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

スニペットAndroidManifestから

Intent intent = new Intent(MainActivity.this, StoriesActivity.class); 
intent.putExtra("author_id", author.getID()); 
intent.putExtra("author_name", author.getName()); 
startActivity(intent); 

スニペット:

<application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity 
      android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".StoriesActivity" 
      android:theme="@style/AppTheme.NoActionBar" /> 

     <activity 
      android:name=".StoryBodyActivity" 
      android:theme="@style/AppTheme" 
      android:parentActivityName="com.example.apple.bookshelf.StoriesActivity"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.apple.bookshelf.StoriesActivity" /> 
     </activity> 

    </application> 
+0

authorID = extras.getInt( "AUTHOR_ID");あなたがこの値をStoriesActivityに送る場所: –

+0

@Hasmukhkachhatiya私の更新を参照してください – Sebastian

+0

それは主なアクティビティから来るので、ストーリーアクティビティ –

答えて

1

と交換してください:私は削除することをお勧めします

まずextrasが存在するかどうかを確認することです。

if(extras != null){  
    authorID = extras.getInt("author_id"); // NullPointerException here 
    final String authorName = extras.getString("author_name"); 
    Log.i("click", Integer.toString(authorID)); 
} 

第2の解決方法は、StoryBodyActivityでNavUtils.navigateUpFromSameTask(this);の代わりにfinish()を使用することです。

はそれが役に立てば幸い:)

+0

ありがとうございました! 'finish()'は非常に洗練された解決策でした。 – Sebastian

0

これを防ぐには、このアクティビティに来るときに余分なものがあるかどうかを確認してください。

if (getIntent().hasExtra("author_id")){ 
     authorID = getIntent().getIntExtra("author_id",0); 
    } 
0

私はあなたのコードを見ていないが、私はアドバイスを与えることができ、あなたは流れに行かなければならないこのよう

SharedPreferences sharedPref1 = getSharedPreferences("alldetais", Context.MODE_PRIVATE); 
        SharedPreferences.Editor editor1 = sharedPref1.edit(); 
         editor1.putString("author_id", author.getID()); 
       editor1.putString("author_name", author.getName()) 
    editor1.commit(); 

を試してみて、このよう

SharedPreferences sharedPref1 = getApplicationContext().getSharedPreferences("alldetais", Context.MODE_PRIVATE); 
     author_id=sharedPref1.getString("author_id",""); 
0

を取得アクティビティーA→アクティビティーB→アクティビティーC これで、AからCのインテントを使用してデータを渡す場合、AからBへのデータを送信しなければなりません。レシーそれをBに入れ、受信したデータをBからCに再度渡してから使用します。また、私は、より正確な方法はBからのデータを取得すると思う 意図intent = getIntent(); intent.getExtras();

2

あなたが直面している問題は、ラインである:「アンドロイド:parentActivityNameは= 『com.example.apple.bookshelf.StoriesActivity』」カスタムバックボタンを押しているとき

、それは新しいを作成していますStoriesActivityのインスタンス

android:parentActivityName="com.example.apple.bookshelf.StoriesActivity"> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.apple.bookshelf.StoriesActivity" /> 

を、あなたはここで2つのソリューション持っ

NavUtils.navigateUpFromSameTask(this); 

onBackPressed(); 
関連する問題