2017-05-27 103 views
0

我试图让用户从他们的画廊选择一个图像来替换我的活动(这是基于DB值编程添加)现有的。下面是这是造成一些问题上我的代码部分:Android - getIntExtra结果默认值在onActivityResult

public void requestImage(int imageID){ 
    Intent intent = new Intent(); 
    intent.putExtra("imageID",imageID); 
    intent.setType("image/*"); 
    Log.v("requestImage",Integer.toString(intent.getIntExtra("imageID",0))); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 
     Uri uri = data.getData(); 

     try { 
      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
      int imageID = data.getIntExtra("imageID",0); 
      Log.v("onactivityresult",Integer.toString(imageID)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

的目标是让被选定为这个功能,我路过这对requestImage,通过对onActivityResult的图像的ID。 onActivityResult包含用于根据用户选择的图像设置图像位图的代码(为简明起见,从代码示例中省略)。

注意两个记录语句,这导致:

05-27 15:51:31.756 7769-7769/com.praytoday.app.praytoday V/requestImage: 12 

05-27 15:45:55.511 2037-2037/com.praytoday.app.praytoday V/onactivityresult: 0 

如您在日志报表注意到,第一个日志实际上是让从意图本身整型,所以我敢肯定它是被正确设置(并且这里没有任何类型问题)。

在我看来,数据不应该是一样的意图(请原谅我缺乏对意图主题的认识 - 这对我来说很新颖)。

的事情,我曾尝试:

  • 使用getIntent(),而不是数据
  • 不使用createChooser,而是只使用普通的意图
  • 看着这个我的每一个问题/答案可以找到

任何帮助确定为什么这个额外的价值不在数据参数将非常感激!提前致谢。

+0

如果我没有记错,传递的意图不是你传递的意图 - 意味着该意图中的任何参数都不会返回。但我可能是错的 – Zoe

+0

这真的好像会击败目的!似乎必须有可能通过某种方式传递一个论点 - 我真的认为这是方式,但我想也许它不是。 – 3nails4you

+0

虽然我很久没有使用startActivityForResult,但不要把它当作答案。由于框架中的错误,可能会有一些重置它。 – Zoe

回答

0

我继续前进,只是设置一个全局变量来存储当前设置的替换图像。 requestImage将其设置为当前图像ID,然后onActivityResult使用该变量。不是很优雅,但它的作品!