2017-11-11 69 views
-1

我有一個流向MainActivity - > StoriesActivity - > StoryBodyActivity。後退按鈕會拋出NullPointerException

使用Intents將每個變量傳遞給下一個。

我試圖從StoryBodyActivity實現一個返回按鈕到StoriesActivity,但它在StoryActivity的authorID = extras.getInt("author_id");上拋出一個NullPointerException。

我知道什麼是NullPointer。我只是不知道如何解決這個問題!難道是因爲它不再能夠訪問從MainActivity傳遞的數據嗎?

注意:單擊設備上的後退按鈕時,此功能正常工作,而不是ActionBar上的圖標。

片段從StoryBodyActivity:

從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); 
    } 

段:

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)); 
} 

片段從MainActivity:

從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)); 
} 

第二種解決方案是在StoryBodyActivity中使用finish()而不是NavUtils.navigateUpFromSameTask(this);

希望它有幫助:)

+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,然後recei將它存入B中,然後再將接收到的數據從B傳遞給C,然後使用它。另外,我認爲從B獲取數據的更正確方法是 Intent 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" /> 

而更換

NavUtils.navigateUpFromSameTask(this); 

onBackPressed();