【问题标题】:Result intent failing to send to second activity结果意图未能发送到第二个活动
【发布时间】:2016-05-19 01:15:55
【问题描述】:

我正在使用this github 存储库中的android 裁剪库。

删除以下三行后,以下代码可以正常工作:

Intent i=new Intent(MainActivity.this,Edit.class);
 i.putExtra("imageUri", uri.toString()); 
startActivity(i);

我正在尝试将以下结果意图发送到第二个活动:

 private void handleCrop(int resultCode, Intent result) { 
    hideProgress();
 if (resultCode == RESULT_OK){
    resultView.setImageURI(Crop.getOutput(result));
    uri=result.getData(); 
   //result.setData(null);
   Intent i=new Intent(MainActivity.this,Edit.class);
   i.putExtra("imageUri", uri.toString()); 
   startActivity(i);
 }

但是,由于某种原因,我收到以下错误:

ERROR: Caused by: java.lang.NullPointerException at com.soundcloud.android.crop.example.MainActivity.handleCrop(MainActivity.java:188) 
line 188 is : i.putExtra("imageUri", uri.toString());

如何正确地将结果意图发送到第二个活动并避免触发此错误?

【问题讨论】:

  • 可能是uri.toString() = null
  • uri=result.getData();返回空
  • 在通过它之前做一个空检查,就像@MD所说的那样额外。它可能为空
  • 您的Uri 好像是null,请确认。

标签: android android-intent


【解决方案1】:

检查uri.toString() 是否为空

if(uri.toString() != null && !uri.toString().isEmpty())
 i.putExtra("imageUri", uri.toString()); 

在通过Intent 传递数据之前。

【讨论】:

  • 我和你说的一样,但发生了同样的错误 if(uri.toString() != null && !uri.toString().isEmpty()) **错误: 空指针异常 **
  • 引起:com.soundcloud.android.crop.example.MainActivity.handleCrop(MainActivity.java:193) 第 193 行的 java.lang.NullPointerException 是:if(uri.toString() != null && !uri.toString().isEmpty())
  • @altu 查看我的回答,您需要检查 uri 是否为空。因为如果uri 为空并且您在其上调用toString(),它将抛出NullPointerException
【解决方案2】:

检查uri 是否为空,如下所示:

if(uri != null)
    i.putExtra("imageUri", uri.toString()); 

编辑:

怎么可能为空?

它是空的,因为 getData() 实际上是空的。

resultview 顺利保存到 imageview

好回答你可以看Crop.getOutput(result)here的源码。来自源代码:

public static Uri getOutput(Intent result) {
        return result.getParcelableExtra(MediaStore.EXTRA_OUTPUT);
    }

所以Crop.getOutput(result) 没有从getData() 得到Uri。它使用getParcelableExtra() 获取它。所以,把你的代码改成这样:

private void handleCrop(int resultCode, Intent result) { 
    hideProgress();
 if (resultCode == RESULT_OK){
    resultView.setImageURI(Crop.getOutput(result));
    uri=result.getParcelableExtra(MediaStore.EXTRA_OUTPUT);
   //result.setData(null);
   Intent i=new Intent(MainActivity.this,Edit.class);
   i.putExtra("imageUri", uri.toString()); 
   startActivity(i);
 }

【讨论】:

  • 是的 uri 是 null ..但是它怎么可能是 null ......你可以在上面看到(有问题的代码)代码结果视图被顺利保存到 imageview ......我只是想将相同的结果意图发送到第二个活动.....
  • 我和你说的一样,但是编辑类得到空 Uri.... 编辑类代码 Uri uri = getIntent().getParcelableExtra("imageUri");
  • 在 Edit 类中,您必须使用此行 getIntent().getStringExtra("imageUri") 获取 imageUri。
  • 感谢亲爱的您的时间贡献
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
相关资源
最近更新 更多