【问题标题】:Android and Azure Mobile Services: Using invokeAPI to return recordsetAndroid 和 Azure 移动服务:使用 invokeAPI 返回记录集
【发布时间】:2014-06-21 17:44:13
【问题描述】:

我正在尝试一些非常简单的事情。我有一个名为“missingvehiclesfrominventoryjob”的自定义 API,它只是从标准 SQL 查询返回一个记录集。

我可以在我的 WinForms 和 Windows Phone 应用程序中轻松执行此操作,但我不知道如何在 Android 应用程序上执行此操作。

这是我的代码:(在 Android Studio 中不编译):

msClient.invokeApi("missingvehiclesfrominventoryjob", kd, new     
ApiOperationCallback<List<InventoryProspects>>(){
            @Override
            public void onCompleted(List<InventoryProspects> missingVehicles, Exception e,  
                   ServiceFilterResponse serviceFilterResponse){
                     for (InventoryProspects item : missingVehicles){
                        mAdapter.add(item);
                     }
               }
        });

问题是回调的参数中的List。我不确定如何表明 invoiceAPI 调用将从数据库中返回多行,并且我在文档中找不到任何地方来解释如何。我也无法在 Internet 上的任何地方找到示例。

我确信我不是唯一尝试这样做的人。

提前致谢

查克·吉登斯

【问题讨论】:

  • 所以没有人知道如何做到这一点?
  • 我可以尝试帮助解决这个问题,但出于好奇,您为什么要使用自定义 API 来读取表格而不是表格 API?
  • 因为不是简单的表读取......我检查了其他要求,然后返回3个表的连接。
  • 你有没有想过这个问题?

标签: android sql azure azure-mobile-services recordset


【解决方案1】:

我还没有机会测试它(当我有时间并根据需要编辑答案时会尝试)但我的想法是 Android SDK 不允许你做你想做的事情。 invokeApi 方法期望将强类型类设置为响应类型(或者您可以使用原始 JSON 方法)。在这种情况下,你试图说你想要一个项目列表,但我认为这不会奏效。我认为您需要创建一个新类(即missingvehiclesfrominventoryjobResponse),其中包含一个List 类型的属性。请注意,您需要更改方法调用以实际匹配 invokeApi 的可用选项之一,我不相信它现在正在这样做。您可以在此处阅读有关该方法的不同格式的更多信息:http://blogs.msdn.com/b/carlosfigueira/archive/2013/06/19/custom-api-in-azure-mobile-services-client-sdks.aspx

或者,您可以对表端点使用表方法,在该端点上读取需要返回一组结果。

【讨论】:

  • 是的,我已经看过披萨的那个样品了。我可以在 .NET WinForms 应用程序和我编写的 Windows Phone 应用程序中执行此操作,那么为什么它不适用于 Android...只需使用 List?我确信我们在这里遗漏了一些如此简单的东西,但在任何地方都找不到样本......
【解决方案2】:

我为解决这个问题所做的就是调用一个不同的 invokeApi 重载,它返回一个 JsonElement,然后将其反序列化到我的对象中,如下所示:

mClient.invokeApi("MyCustomApi",null, "GET", null, new ApiJsonOperationCallback() {
        @Override
        public void onCompleted(JsonElement jsonElement, Exception e, ServiceFilterResponse serviceFilterResponse) {
            GsonBuilder gsonb = new GsonBuilder();
            Gson gson = gsonb.create();

            JsonArray array = jsonElement.getAsJsonArray();
            List<MyObject> myObjects = new ArrayList<MyObject>()>
            for(int i = 0; i < array.size(); i++)
            {
                myObjects.add(gson.fromJson(array.get(i).getAsJsonObject().toString(), MyObject.class));
            }
        }
    });

【讨论】:

    【解决方案3】:

    您是否尝试过从应用程序远程调试您的 API 调用。[http://blogs.msdn.com/b/azuremobile/archive/2014/03/14/debugging-net-backend-in-visual-studio.aspx].您的应用会在执行此操作时超时,但如果它返回正确的结果集,您可以逐行查看控制器操作的执行情况。如果没有问题,那么问题应该在解析结果集。

    您在回调中遇到的异常是什么?您是否尝试过使用其他方法参数,例如使用不同的 HTTP 方法传递?也可以将此作为参考。 http://azure.microsoft.com/en-us/documentation/articles/mobile-services-android-get-started/

    请粘贴您的异常或任一控制器操作,以及结果集的数据传输对象的对象结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      相关资源
      最近更新 更多