putExtra(),getStringExtra() - 为什么它不起作用?

时间:2014-03-22 19:35:25

标签: java android

我怀疑只有一些愚蠢的错误,但我被困住了。问题很简单:我的字符串path不会发送到MainActivity

  1. 在FileListActivity.class中创建意图

    intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("path", fileName);
        Toast.makeText(this, fileName + " set to play!", Toast.LENGTH_SHORT).show();
        startActivity(intent);  
    
  2. 在MainActivity.class中接收意图

    protected void onResume(){
    super.onResume();
    Toast.makeText(this, "path set" + getIntent().getStringExtra("path"), Toast.LENGTH_SHORT).show();
    if(getIntent().hasExtra("path")) try {
        mediaPlayer.setDataSource(this, Uri.parse(getIntent().getStringExtra("path")));
        mediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    }

  3. FileListActivity中的Toast显示正确的文件名。在MainActivity中,它为空。

3 个答案:

答案 0 :(得分:3)

尝试覆盖protected void onNewIntent (Intent intent)中的MainActivity,如下所示......

@Override
protected void onNewIntent (Intent intent) {
    setIntent(intent);
}

使用MainActivity重新启动Intent.FLAG_ACTIVITY_SINGLE_TOP并使用getIntent() MainActivity方法调用onResume()无法获得新的Intent只需获取原来的Intent,而path额外的onNewIntent(...)

通过覆盖setIntent(...)并使用它来呼叫Intent,新getIntent()会覆盖原始onResume(),而{{1}}中对{{1}}的调用应该会获得正确的数据。

答案 1 :(得分:0)

您可以在MainActivity中尝试这种方式:

 protected void onCreate(Bundle savedInstanceState) 
{
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    Bundle pathBundle=getIntent().getExtras();

     if(pathBundle!=null)
      {
        String myPath=pathBundle.getString("path");
      }
 }

和onResume方法

  protected void onResume()
{
 super.onResume();
   try 
{
    mediaPlayer.setDataSource(this, Uri.parse(myPath)); // Dont forget to declare myPath String globally.
    mediaPlayer.prepare();
} catch (IOException e) {
    e.printStackTrace();
}

希望这可以解决你的问题..

答案 2 :(得分:0)

如果传递给putExtra()的值不是String对象,则getStringExtra()返回null。

根据对问题的评论来判断,这不是这个具体案例的答案。但是,值得一提的是因为这是问题的一个非常常见的原因" putExtra(),getStringExtra() - 为什么它不起作用?"