java - 在phonegap应用程序中调用应用程序引擎API

标签 java android cordova google-app-engine google-cloud-datastore

我希望在我的phonegap应用程序中执行API方法来检索数据存储中的所有条目。我一直在三星 S4 上对此进行测试,似乎无法在控制台中收到任何错误或任何内容,并且数据存储区的日志表明尚未尝试从数据存储区检索数据。

我将在下面发布我的 base.js 文件,该文件是假设执行 API 调用的函数。

我一直在关注这个guide由 Google 创建来实现这一点。该方法适用于 POST 而不是 GET,因为根据我遵循的另一个教程,您必须通过 post 方法而不是 get 方法请求数据。

var requestData = {};

google.appengine.CMS.client.getCalls = function() {
    gapi.client.call.queryCalls(requestData).execute(function(resp) {
        if (!resp.code) {
        resp.calls = resp.calls || [];
        var result = "";
          for (var i=0;i<resp.calls.length;i++) {
              result = result+ resp.calls[i].callId+ " : " +          resp.calls[i].patientName+ " : " + resp.calls[i].doctor+ " : " + "<br/>" +     resp.calls[i].address1+ " : " + resp.calls[i].address2+ " : " + resp.calls[i].address3+ " : " + "<br/>" + resp.calls[i].postCode + " : " + resp.calls[i].patientLocation+ " : " + resp.calls[i].symptoms+ " : " + "<br/>" + resp.calls[i].contactNumber+ " : " + resp.calls[i].callDateTime+ " : " + resp.calls[i].currentStatus+ "<br/>";
        }
        return result;
        google.appengine.CMS.client.print(resp);
    }
});
};


/**
 * Enables the button callbacks in the UI.
 */
google.appengine.CMS.client.enableButtons = function() {
    var ListCalls = document.querySelector('#listCalls');
    ListCalls.addEventListener('click', google.appengine.CMS.client.getCalls);
};

/**
 * Initializes the application.
 * @param {string} apiRoot Root of the API's path.
 */
var apiRoot = 'generic root';
google.appengine.CMS.client.init = function(apiRoot) {
    // Loads the OAuth and helloworld APIs asynchronously, and triggers login
    // when they have completed.
var apisToLoad;
var callback = function() {
    if (--apisToLoad == 0) {
        google.appengine.CMS.client.enableButtons();
    }
};

apisToLoad = 1; // must match number of calls to gapi.client.load()
gapi.client.load('call', 'v1', callback, apiRoot);
};

最佳答案

如果您使用打包的phonegapp应用程序,即显示本地主机的Web View ,您需要:

  • 授权 localhost 源的客户端 ID,如下所示 [1]
  • 使用对端点的绝对引用,而不是使用 window.location.host,如下所示 [2]
  • 或按照本部分 [3]

我建议您使用直接指向*.appspot.com 上页面的phonegap 应用程序,而不是将其复制到应用程序上:

  • 无需用户交互即可更新应用
  • 更好的开发,因为您可以在phonegap之外测试应用
  • 切换 appengine 版本并自动将所有用户更新为最新版本

[1] https://cloud.google.com/appengine/docs/java/endpoints/getstarted/backend/setup#creating_an_app_engine_app_for_deployment

[2] https://cloud.google.com/appengine/docs/java/endpoints/getstarted/clients/js/client_ui

而不是

<script>
        function init() {
            google.appengine.samples.hello.init('//' + window.location.host + '/_ah/api');
        }
    </script>
    <script src="https://apis.google.com/js/client.js?onload=init"></script>

使用

<script>
        function init() {
            google.appengine.samples.hello.init('https://youappid.appspot.com/_ah/api');
        }
    </script>
    <script src="https://apis.google.com/js/client.js?onload=init"></script>

[3] https://cloud.google.com/appengine/docs/java/endpoints/consume_js

关于java - 在phonegap应用程序中调用应用程序引擎API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29232732/

相关文章:

java - 二维数组的奇怪错误

java - 在启动时使用 Hibernate 验证数据库连接

java - Gson在JAVA Android中将 boolean 值从1反序列化为false

Android:正确的 Intent 过滤器指示我的应用程序可以打开文件类型?

java - 控制并行线程数

java - 无法构造 javafx.application.Application 实例

android - 无法在 visual studio 的 apache cordova 中更改已安装的 android 平台

cordova - Phonegap相机功能

java - 在 Kotlin 的对象字段中具有上下文的 Android 类

jquery - 使用 phonegap 将 Web 应用程序转换为适用于 Android 的 native 应用程序