从android调用google云端点时注入实体对象

时间:2014-11-18 11:09:50

标签: android google-app-engine google-cloud-endpoints

如何将arraylist传递给google cloud端点?它似乎不起作用。

编辑开始---- 以下是以arraylist作为输入的端点的签名

public CollectionResponse<String> listDevices(@Named("devices") ArrayList<String> devices) 

然而,当我迭代这个arraylist时,我将所有记录压缩成一个。所以即使我传递10个字符串,我的端点只有一个。

编辑结束----

我在某处读到了我应该为arraylist创建一个包装器实体然后传递它。

编辑开始---- 所以我创建了包含arraylist的实体

@Entity
public class DEviceList {
    ArrayList<String> devices;
}

并将签名修改为 -

public CollectionResponse<String> listDevices(DeviceList devices) 

是否可以从客户端传递DeviceList的对象,即使它不是@Named?你能提供语法吗? 我的理解是,因为它是一个实体,它不能被@Named,所以在调用时我需要注入它。 但谷歌只允许三种注入类型 -    1. com.google.appengine.api.users.User    2. javax.servlet.http.HttpServletRequest    3. javax.servlet.ServletContext

因此上述签名不起作用。

所以我将签名更改为 -

public CollectionResponse<String> listDevices(HttpServletRequest request)

在里面,我可以将实体作为

DeviceList deviceList = (DeviceList)request.getAttribute("deviceList");

但是我不确定如何从android客户端调用此端点? 我如何使用HTTPServletRequest传递实体对象?

编辑结束----

我该怎么做?有谁能引用一个例子?

1 个答案:

答案 0 :(得分:1)

你说出问题的方式,似乎呼叫无声地失败了。那不可能。您必须收到某种异常或登录某处可以帮助您更好地识别问题。你可以read this article在云端点API和android上刷新。

如果您在将客户端的对象的arraylist传递给API时遇到问题,我建议您检查以下内容:

  • API中的参数类型是否与客户端发送的内容相匹配?他们都有权访问类定义吗?
  • 如果arraylist中的数据类型是原语,并且它仍然失败,那么你在某处读到的建议可能是指使用包装器对象的需要(虽然我不认为是这种情况)只包含一个字段 - arraylist,并沿着该行传递?

如果检查日志/错误消息的提醒或此答案中的任何其他信息有助于您解决问题,请务必接受,但不能先编辑您的帖子以解释您如何解决问题。