getIntent()。getStringExtra()返回null

时间:2017-09-27 07:20:04

标签: android

我在onClick中有MainActivity方法,如下所示,

public void onClick(View view) {
    Intent i = new Intent(this, SecondActivity.class);
    i.putExtra("I", "0");
    startActivity(i);
}

SecondActivity我验证了Intent如下

if (getIntent().getStringExtra("I") == null) {
    Toast.makeText(this, "NULL", Toast.LENGTH_LONG).show();
} else {
    Toast.makeText(this, "NOT NULL", Toast.LENGTH_LONG).show();
}

并从ThirdActivity开始SecondActivity,如下所示

public void onClick(View view) {
    Intent i = new Intent(this, ThirdActivity.class);
    startActivity(i);
}

现在,当从SecondActivity ThirdActivity返回getIntent().getStringExtra("I")时,会返回null。我还尝试覆盖onOptionsItemSelected如下。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent i = getIntent();
            i.putExtra("I", "0");
            break;
    }
    return super.onOptionsItemSelected(item);
}

现在不知道如何解决这个问题。我不想在这个问题上使用SharedPreference

7 个答案:

答案 0 :(得分:2)

请按以下步骤操作:

  1. 为结果启动ThirdActivity

    public void onClick(View view) {
      Intent i = new Intent(this, ThirdActivity.class);
      startActivityForResult(i, 1);
    }
    
  2. 更新以下方法,添加setResult(Activity.RESULT_OK, i);

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
     switch (item.getItemId()) {
      case android.R.id.home:
        Intent i = getIntent();
        i.putExtra("I", "0");
        setResult(Activity.RESULT_OK, i);
        break;
     }
     return super.onOptionsItemSelected(item);
    }
    
  3. 在SecondActivity中,实现onActivityResult

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (requestCode == 1 && resultCode == RESULT_OK) {
        // Now use data.getStringExtra("I");
        }
    }
    

答案 1 :(得分:1)

这是因为当你从第三个活动回到第二个活动时,getIntent()返回第三个活动的意图,而不是第一个活动的意图。

在从第三个活动导航到第二个活动时,你没有传递任何字符串,因此你得到一个空值。

答案 2 :(得分:1)

您没有完成任何活动,并且您正在将值从主要活动传递到第二个,然后调用第三个活动,只是从第三个活动返回并恢复第二个活动,您没有将任何数据传递给第二个活动来自第三项活动。

只需更改您的代码,如下所示: -

//from second to third
public void onClick(View view) {
Intent i = new Intent(this, ThirdActivity.class);
startActivity(i);
finish();
}

// returning from third to second
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        Intent i = new Intent(this, second.class);
i.putextra("I","0");
startActivity(i);
finish();
        break;
}
return super.onOptionsItemSelected(item);
}

你也可以这样改变: -

  @Override
public void onBackPressed() {
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("I","0");
startActivity(i);
finish();   

}

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        onBackPressed();
        break;
}
return super.onOptionsItemSelected(item);
}

仅在您的第三个活动中

如果你不想startactivty那么startActivtyForResult()从第二到第三: -

startActivityForResult(i,101);

在第二项活动中实施onActivtyResult方法: -

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     // Check which request we're responding to
if (requestCode == 101 && resultCode == RESULT_OK) {
// Now use data.getStringExtra("I");
}
}

对于第三个活动,只需在onBackpress()中完成它,如: -

   @Override
public void onBackPressed() {
 Intent resultData = new Intent();
 resultData.putExtra("I", "0");
 setResult(Activity.RESULT_OK, resultData);
 finish();
 }

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        onBackPressed();
        break;
}
return super.onOptionsItemSelected(item);
}

答案 3 :(得分:1)

您可以尝试使用#RUN C CODE ./simv -gui -ucli +DVE +UVM_NO_RELNOTES -l simv.log +UVM_TESTNAME=keycontrol_basic_test -do ../../verification/PVE/keycontrol/tools/keycontrol_ucli_init.synopsys -sv_lib keycontrol_C_code_wrapper 方法从startActivityForResult()SecondActivity进行链接,然后在杀死ThirdActivity之前使用setResult(intent)。因此,当您返回ThirdActivty时,您将获得SecondActivity ThirdActivty onActivityResult SecondActivity方法中的结果意图。

希望这会有所帮助。

答案 4 :(得分:0)

从ThirdActivity转向SecondActivity时进行更改:

Intent i = new Intent(this, SeconActivity.class);
i.putExtra("I",getIntent().getStringExtra("I"));
startActivity(i);

答案 5 :(得分:0)

你必须再次通过

i.putExtra("I", "0");

从第三项活动到第二项活动

答案 6 :(得分:0)

试试这个: 把它放在你的第三个活动上

  @Override
public void onBackPressed() {
    Intent i = new Intent(this, SecondActivity.class);
    i.putExtra("I","0");
    startActivity(i);
    finish();   

}