如何在onResume中使用Intent?

时间:2015-08-17 20:59:50

标签: android android-intent onresume

我正在尝试将图像路径从一个活动发送到另一个活动。我正在捕获onResume中的意图,但字符串路径始终为null。我不知道我做错了什么。希望你们可以帮我解决这个问题。

这是我的活动,我抓住图像路径并发送意图。

private Intent testImage = new Intent(this, MyActivity.class);

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.card_create_layout);
    testImage = new Intent(this, MyActivity.class);
}


private void grabImage()
{
    Intent imageGetter = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(imageGetter, RESULT_LOAD_IMAGE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data)
    {
        Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};//Array size of 1, and we put in a string
        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        user_image_path = cursor.getString(columnIndex);//here we have our image path.
        cursor.close();
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setImageBitmap(BitmapFactory.decodeFile(user_image_path));
    }

    testImage.putExtra("the_image", user_image_path);

}

@Override
public void onClick(View v)
{
    switch (v.getId())
    {
        case R.id.theCreateButton:
            grabImage();
            break;
        case R.id.theDesButton:
            startActivity(sendInformation);
    }
}

@Override
public void onBackPressed()
{
    super.onBackPressed();
    MyActivity.checkCard();
    setResult(Activity.RESULT_OK, getIntent());
    finish();
}

现在在我的其他活动中,当我抓住图像并按回来

@Override
public void onResume()
{
    super.onResume();
    String ImagePath = getIntent().getStringExtra("the_image");
    if(ImagePath == null)
    {
        Toast.makeText(this,"hello everyone",Toast.LENGTH_LONG).show();
    }
}

它继续显示toast消息“hello everyone”,这意味着ImagePath持续为null。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

活动之间的传递机制有三种方式:

  • 通过DI(依赖注入)
  • via Bundle mechanism
  • 通过Singletone类,在活动之间扮演桥梁或数据持有者的角色。

要避免duplicating answer - 请在stackoverflow中以任何方式搜索(我建议最简单 - via Bundle。)

快速指南:

  1. 您通过活动A中的intent.putExtra(String name, String value)将字符串放入捆绑包
  2. 使用startActivity(intent);
  3. 开始此意图
  4. getIntent().getStringExtra(String name)方法中的B活动读取值视图OnCreate中。
  5.   活动A和B中的

    名称值需要相同。这是

答案 1 :(得分:1)

我没看到

 startActivity(testImage);

如果你没有使用那个意图来启动活动,那么没有额外的名为'the_image',而getStringExtra函数将有效地返回null。

@Override
public void onBackPressed() {

Intent intent = new Intent();
intent.putExtra("the_image", user_image_path);
setResult(RESULT_OK, intent);
super.onBackPressed();
} 

如果你已经开始了结果活动,上面是如何正确地做到这一点。