Android 如何将字符串列表作为参数传递给Google Cloud端点

Android 如何将字符串列表作为参数传递给Google Cloud端点,android,google-app-engine,google-cloud-endpoints,Android,Google App Engine,Google Cloud Endpoints,我正在为一个简单的Android应用程序使用Google云端点。但是,我无法将字符串列表作为参数传递给API方法。 如果我使用List作为参数类型,构建就可以了,但是我传递的列表中的字符串是串联的,用逗号分隔,并且服务器接收的列表中只有一个条目,这个串联的字符串。例如,如果在客户机中我传递[“a”、“b”、“c”],则服务器接收[“a、b、c”]。 你能帮我找到一个正确的方法吗 编辑1: 在云端点中,我有: @ApiMethod(name = "addGroup") public void ad

我正在为一个简单的Android应用程序使用Google云端点。但是,我无法将字符串列表作为参数传递给API方法。 如果我使用List作为参数类型,构建就可以了,但是我传递的列表中的字符串是串联的,用逗号分隔,并且服务器接收的列表中只有一个条目,这个串联的字符串。例如,如果在客户机中我传递[“a”、“b”、“c”],则服务器接收[“a、b、c”]。 你能帮我找到一个正确的方法吗

编辑1:

在云端点中,我有:

@ApiMethod(name = "addGroup")
public void addGroup(@Named("members") List<String> members,
                     @Named("session") String sessionString) throws ForbiddenException
@ApiMethod(name=“addGroup”)
public void addGroup(@Named(“members”)列出成员,
@命名(“会话”)字符串sessionString)引发禁止异常
在Android客户端中:

final List<String> selectedFriends = new ArrayList<>();
selectedFriends.add("A");
selectedFriends.add("B");
selectedFriends.add("C");         
ServerApi.getInstance().addGroup(selectedFriends,Session.JSONSession()).execute();
final List selectedFriends=new ArrayList();
选择好友。添加(“A”);
选择好友。添加(“B”);
选择好友。添加(“C”);
ServerApi.getInstance().addGroup(selectedFriends,Session.JSONSession()).execute();
编辑2: 自动生成的类看起来已反编译为:

public class AddGroup extends MyApiRequest<Void> {
    private static final String REST_PATH = "addGroup/{members}/{session}";
    @Key
    private List<String> members;
    @Key
    private String session;

    protected AddGroup(List<String> this$0, String members) {
        super(MyApi.this, "POST", "addGroup/{members}/{session}", (Object)null, Void.class);
        this.members = (List)Preconditions.checkNotNull(members, "Required parameter members must be specified.");
        this.session = (String)Preconditions.checkNotNull(session, "Required parameter session must be specified.");
    }
... everything as expected
}
public类AddGroup扩展了myapirest{
私有静态最终字符串REST_PATH=“addGroup/{members}/{session}”;
@钥匙
非公开名单成员;
@钥匙
私有字符串会话;
受保护的AddGroup(列出此$0,字符串成员){
super(MyApi.this,“POST”,“addGroup/{members}/{session}”,(Object)null,Void.class);
this.members=(List)premissions.checkNotNull(members,“必须指定必需的参数成员”);
this.session=(String)premissions.checkNotNull(session,“必须指定必需的参数session”);
}
…一切如期而至
}
让我困惑的是this$0参数和第二个名为members的参数(session参数看起来被跳过了?)


谢谢大家!

我不知道为什么注释处理器以某种方式将
这个$0
作为路径参数注入。您的API真的需要在路径的一部分包含
成员
会话
?或者,它们是否可以/应该都是查询参数(请参阅自动生成的代码及其如何将它们注入其中)?尝试删除这两种方法的
@Named
注释,这将使它们自动查询参数。

鉴于此方法正在进行修改,应该是一篇文章。我建议不要在这里使用@Named。我将创建一个包含这两个参数的
AddGroupRequest
类。通过这种方式,它们作为JSON主体而不是URL参数传递。如前所述,这是一个bug,如果您需要一个列表来处理URL参数,您可以在应用程序引擎中提交一个问题。但我建议你还是用我的解决方案,除非你有充分的理由使用这样的URL。

我也遇到过这个问题。 尝试了不同的方法来解决这个问题,但没有任何效果

已向Google AppEngine问题跟踪器报告问题:

如果您同时包含带注释的云端点代码和使用该库的Android应用程序代码,这将非常有用。我已经更新了这个问题,谢谢。为
ServerApi
定义的
getInstance()
在哪里?通常,生成的库将使用
builder
类来构造相应的请求(JSON客户端派生),然后执行该请求。这看起来像是你以某种方式对它进行了抽象。是的,我为它使用了一个单例,在整个程序中只有一个实例。它适用于其他调用,所以问题不应该在这里。