在android的gae项目中如何将过滤标准传递给API

在android的gae项目中如何将过滤标准传递给API,android,google-app-engine,Android,Google App Engine,我是android和GAE的新手,尝试创建一个小型android应用程序来管理车辆库存。我被困在一个场景中,我需要获得某个特定经销商的合计库存数量。谷歌创建的默认API不支持任何此类功能,因此我创建了一个自己的API,运行良好。但问题是,我需要从我的android应用程序中输入过滤标准,我不知道如何实现这一点 我的GAE代码 @ApiMethod(name = "listAggregatedStock", path = "listAggregatedStock") public Collecti

我是android和GAE的新手,尝试创建一个小型android应用程序来管理车辆库存。我被困在一个场景中,我需要获得某个特定经销商的合计库存数量。谷歌创建的默认API不支持任何此类功能,因此我创建了一个自己的API,运行良好。但问题是,我需要从我的android应用程序中输入过滤标准,我不知道如何实现这一点

我的GAE代码

@ApiMethod(name = "listAggregatedStock", path = "listAggregatedStock")
public CollectionResponse<AggregatedStock> listAggregatedStock(
        @Nullable @Named("cursor") String cursorString,
        @Nullable @Named("limit") Integer limit,
        @Nullable @Named("columns") String[] columns,
        @Nullable @Named("values") String[] values) {

    EntityManager mgr = null;
    Cursor cursor = null;
    List<AggregatedStock> execute = null;

    StringBuffer queryString = new StringBuffer();

    queryString.append(" select date, vehicleCode, vehicleSubCode, colorCode, sum(count) from Stock as AggregatedStock ");

    if(columns != null && columns.length > 0) {
        queryString.append(" where ");
        int i = 0;
        for(String column : columns){
            if(i > 0){
                queryString.append(" and ");
            }
            queryString.append(column + " = :" + column);
            i++;
        }
    }

    queryString.append(" group by date, vehicleCode, vehicleSubCode, colorCode ");

    try {
        mgr = getEntityManager();
        Query query = mgr.createQuery(queryString.toString());
        if (cursorString != null && cursorString != "") {
            cursor = Cursor.fromWebSafeString(cursorString);
            query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
        }

        if (limit != null) {
            query.setFirstResult(0);
            query.setMaxResults(limit);
        }

        if(columns != null && columns.length > 0) {
            for(int i = 0; i < columns.length; i++) {
                query.setParameter(columns[i], values[i]);
            }
        }

        List<Object[]> results = (List<Object[]>) query.getResultList();

        execute = new ArrayList<AggregatedStock>();

        for (Object[] result : results) {
            execute.add(new AggregatedStock((Date) result[0],
                    (String) result[1], (String) result[2],
                    (String) result[3], ((Long) result[4]).intValue()));
        }

        cursor = JPACursorHelper.getCursor(execute);
        if (cursor != null)
            cursorString = cursor.toWebSafeString();

        // Tight loop for fetching all entities from datastore and
        // accomodate
        // for lazy fetch.
        for (AggregatedStock obj : execute)
            ;
    } finally {
        mgr.close();
    }

    return CollectionResponse.<AggregatedStock> builder().setItems(execute)
            .setNextPageToken(cursorString).build();
}
我目前面临的问题是,我无法传递列和值字符串[]。当我像这样添加它们时

result = endpoint.listAggregatedStock(null, null, new String[]{"column"}, new String[]{"value"}).execute();

签名不匹配。我不确定这是不是正确的方法。我正在使用由Google插件生成的云库,我最终能够通过这种方式实现它

@SuppressWarnings({ "unchecked" })
@ApiMethod(name = "listAggregatedStock", path = "listAggregatedStock")
public List<AggregatedStock> listAggregatedStock(@Nonnull @Named("dealer") String dealer) {

    List<AggregatedStock> execute = null;

    PersistenceManager pm = getPersistenceManager();

    StringBuilder sb = new StringBuilder();
    sb.append(" select date, vehicleCode, vehicleSubCode, colorCode, ");
    sb.append(" SUM(count) from Stock as AggregatedStock ");

    Query query = pm
            .newQuery(sb.toString());

    query.setFilter(" updatedByDealer == " + dealer);
    query.setGrouping(" date, vehicleCode, vehicleSubCode, colorCode ");
    query.setOrdering(" vehicleCode desc ");

    query.declareImports("import com.sandeepapplabs.dms.Stock");

    try {
        List<Object[]> results = (List<Object[]>) query.execute();

        execute = new ArrayList<AggregatedStock>();

        for (Object[] result : results) {
            execute.add(new AggregatedStock((Date) result[0],
                    (String) result[1], (String) result[2],
                    (String) result[3], ((Long) result[4]).intValue()));
        }

    } finally {
        pm.close();
    }

    return execute;
}
@SuppressWarnings({“unchecked”})
@ApiMethod(name=“listAggregatedStock”,path=“listAggregatedStock”)
公共列表listAggregatedStock(@Nonnull@Named(“经销商”)字符串经销商){
List execute=null;
PersistenceManager pm=getPersistenceManager();
StringBuilder sb=新的StringBuilder();
sb.追加(“选择日期、车辆代码、车辆子代码、颜色代码”);
sb.追加(“股票总额(计数)为合计股票”);
查询=pm
.newQuery(sb.toString());
query.setFilter(“updatedbyderderator==”+经销商);
query.setGrouping(“日期、车辆代码、车辆子代码、颜色代码”);
查询.设置顺序(“车辆代码描述”);
declareImports(“import com.sandeapplabs.dms.Stock”);
试一试{
List results=(List)query.execute();
execute=newarraylist();
对于(对象[]结果:结果){
execute.add(新聚合股票((日期)结果[0],
(字符串)结果[1],(字符串)结果[2],
(字符串)结果[3],((长)结果[4]).intValue());
}
}最后{
pm.close();
}
返回执行;
}
我实现了JDO,而不是使用默认方式

@SuppressWarnings({ "unchecked" })
@ApiMethod(name = "listAggregatedStock", path = "listAggregatedStock")
public List<AggregatedStock> listAggregatedStock(@Nonnull @Named("dealer") String dealer) {

    List<AggregatedStock> execute = null;

    PersistenceManager pm = getPersistenceManager();

    StringBuilder sb = new StringBuilder();
    sb.append(" select date, vehicleCode, vehicleSubCode, colorCode, ");
    sb.append(" SUM(count) from Stock as AggregatedStock ");

    Query query = pm
            .newQuery(sb.toString());

    query.setFilter(" updatedByDealer == " + dealer);
    query.setGrouping(" date, vehicleCode, vehicleSubCode, colorCode ");
    query.setOrdering(" vehicleCode desc ");

    query.declareImports("import com.sandeepapplabs.dms.Stock");

    try {
        List<Object[]> results = (List<Object[]>) query.execute();

        execute = new ArrayList<AggregatedStock>();

        for (Object[] result : results) {
            execute.add(new AggregatedStock((Date) result[0],
                    (String) result[1], (String) result[2],
                    (String) result[3], ((Long) result[4]).intValue()));
        }

    } finally {
        pm.close();
    }

    return execute;
}