2017-11-11 107 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();