未能在活动结果上交付结果

Posted

技术标签:

【中文标题】未能在活动结果上交付结果【英文标题】:Failure delivering result on activity result 【发布时间】:2018-03-15 15:42:53 【问题描述】:

下面是来自相机的示例代码意图:

val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    startActivityForResult(intent, REQUEST_CAMERA)

注意:当我从相机按回来时,活动结果显示如下:

java.lang.RuntimeException:将结果 ResultInfowho=null, request=65537, result=0, data=null 传递给活动失败 原因:java.lang.IllegalArgumentException:指定为非空的参数为空:

尝试提出这样的解决方案:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent)  
           try 
                when(resultCode)
                    Activity.RESULT_CANCELED -> 
                        System.out.println("nothing")
                    
                    Activity.RESULT_OK -> 
                        if (requestCode == SELECT_FILE)
                            onSelectFromGalleryResult(data)
                        else if (requestCode == REQUEST_CAMERA)
                            onCaptureImageResult(data)
                    
                
            catch (e:NullPointerException)
                e.printStackTrace()
            

仍然没有解决问题,因为当我调试日志时,如果我从相机按返回而不捕获图像,它不会出现在 func onactivityresult 上。从画廊拍照和拍照就像魅力一样。

谢谢。请帮助我解决这个问题,因为一路上给出的解决方案不起作用。谷歌似乎必须覆盖 fun onresultactivity(resultcode!!:Int)

【问题讨论】:

检查这个:github.com/firebase/FirebaseUI-android/issues/… public void onActivityResult(int requestCode, int resultCode, Intent data) 这是我从父片段派生的。那么如何在 kotlin 中实现呢? Java 到 Kotlin 的转换器错误地将 data: Intent 作为参数,但它应该可以为空,因此将其更改为 data: Intent? 【参考方案1】:

你不应该覆盖它吗?

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 
        super.onActivityResult(requestCode, resultCode, data)
    

【讨论】:

在扩展片段中不需要像这样覆盖 super 覆盖 fun onActivityResult() // 不需要 super 并且如果我放同样会崩溃。最新的 android build 26.0.2 似乎有错误 问题是由于在 onActivityResult 参数中使用 ...data: Intent.. 而不是 ...data: Intent?.. 造成的。【参考方案2】:

我在使用 kotlin 在我的应用程序中实现 PayPal 支付网关时遇到了同样的问题。您只需要在onActivityResult 中添加带有 Intent 的 ?,因为如果数据为空或出现任何问题,则数据可以为空。所以我们需要在onActivityResult中定义data为nullable

只需将您的 SomeActivity 的 onActivityResult 签名替换为以下内容:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)

【讨论】:

是的。新转换器 kotlin 出现问题。 这完全帮助了我!谢谢!

以上是关于未能在活动结果上交付结果的主要内容,如果未能解决你的问题,请参考以下文章

使用sqlite数据库和类在活动之间传输数据时获取失败交付结果[重复]

Android KitKat 失败交付结果 ResultInfo?

项目经理:"该版本性能测试工作由你全权负责,月底交付结果"

最全程序设计流程技术工具交付结果软件全生命周期

持续集成+持续交付+持续部署

从相机中选择图像时无法交付结果,但从图库中选择图像时没有问题