当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda总是在Android上返回空

郜驰
2023-03-14

我正在使用AWS Amplify在iOS和Android上构建一个应用程序。我有一个lambda表达式,它接受经度、纬度、用户名和对象id,并返回一个布尔值,告诉我用户是否在物理上接近该对象

它完美地工作在我的iOS应用程序,我得到truefalse取决于用户位置,但在Android上,我总是得到null作为响应。

这是触发lambda的函数:

fun locationLambda() {
    if ( ContextCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED ) {
        fusedLocationClient.lastLocation.addOnSuccessListener { location : Location? ->
            if (location != null) {

                val latitude = location.latitude.toString()
                val longitude = location.longitude.toString()
                val username = AWSMobileClient.getInstance().username
                val objectId = (intent.extras.getSerializable("object") as Object).getId()

                Log.i("ObjectId", objectId)
                Log.i("Longitude", longitude)
                Log.i("Latitude", latitude)
                Log.i("Username", username)

                mAWSAppSyncClient?.query(IsObjectFoundQuery.builder()
                        .latitude(latitude)
                        .longitude(longitude)
                        .username(username)
                        .objectID(objectId)
                        .build())
                        ?.responseFetcher(AppSyncResponseFetchers.NETWORK_ONLY)
                        ?.enqueue(locationCallback)
            }
        }
    }
}

当我打印日志的参数发送到lambda一切正常,正确的值被发送。

这是我的回调函数:

private val locationCallback = object : GraphQLCall.Callback<IsObjectFoundQuery.Data>() {
    override fun onResponse( response: com.apollographql.apollo.api.Response<IsObjectFoundQuery.Data>) {
        Log.i("Results", response.data()?.isObjectFound.toString())
    }

    override fun onFailure(e: ApolloException) {
        Log.e("ERROR", e.toString())
    }
}

这里我成功地得到了一个响应,但是响应。数据()?。isObjectFoundnull

我在这里做错了什么,还是我必须找别的地方?

共有1个答案

娄振
2023-03-14

在没有日志记录的情况下对lambda函数进行故障排除有点像是在黑暗中发现了什么:这非常困难。您需要记录客户端和服务器端(也称为后端)才能对此进行故障排除。

对于后端日志记录,AWS为Lambda和API网关提供Cloudwatch日志。

一旦确认已打开cloudwatch日志,请遵循以下策略:

>

接下来,使用上面的代码从Android运行第二个测试。在cloudwatch中查找两者之间的差异,这将揭示详细信息,帮助您解决Android呼叫中出现的问题。

如果Amplify没有为API网关或Lambda函数创建Cloudwatch日志,请按照此处的步骤进行设置。希望这能帮助您找到解决方案。

 类似资料:
  • 问题内容: 我正在编写一个需要连接到在node.js服务器上运行的Socket.IO实例的android应用。 尝试使用iOS设备连接到实例并传输数据可以正常工作,但是当我尝试使用android设备进行操作时却失败了。 我正在使用Native java client,这是我在android端使用的代码: 每当我尝试连接时(基本上是在line上),日志将显示以下行: 因此,尝试连接后我立即收到xhr

  • 我知道这个问题和下面的问题是重复的。 我打开了许多选项卡,但结果getWindowHandles()总是返回1。

  • 我已经看了很多教程,但我无法使我的简单JAX-RS应用程序工作。Tomcat总是返回错误404。 要获取类的应用程序: 我的JAX-RS文件: web.xml http://localhost:8080/msm-master/resources/hello/ 编辑:已添加Tomcat控制台输出:

  • 问题内容: 结果始终为1: 我在phpMyAdmin中运行了$ sql查询,它返回3,所以查询不是问题。$ vote_total全局初始化为0,因此1来自某个地方。我还需要提供什么其他信息来帮助我? 谢谢,瑞安 问题答案: 返回选定的行数,而不是特定行的字段。使用来获取您与您的查询选择的行: 您还可以用来获取一行并获取特定字段: 这将获取第一行(从零开始)并返回第一字段(从零开始)。

  • 问题内容: 我已经写了这段简单的代码: 在我的情况当属。谁能建议/建议出什么问题了? 问题答案: 错误检查和处理是程序员的朋友。检查初始化和执行cURL函数的返回值。并在失败的情况下包含更多信息: *在 手动状态: 成功返回cURL句柄,错误返回 FALSE 。 我观察到该函数在您使用其参数且无法解析域时会返回。如果未使用该参数,则该函数 可能 永远不会返回。但是,请务必始终进行检查,因为该手册并

  • 我使用Ehcache 2.6.8作为Spring Boot应用程序的一部分,作为Hibernate 4.3.11的二级缓存。我有一个JMX MBean,它允许我检查缓存的内容(如果您感兴趣,可以在这里查看)。 首先,我使用CacheManager名称来获取缓存列表。这很好。我可以用返回缓存。然后我调用。这很好,cacheName是“com.myapp.DomainObjectName”,键被列为“