Azure应用服务-无法通过Android客户端调用API

时间:2019-05-06 16:27:32

标签: android azure azure-web-sites

我正在尝试通过Android SDK调用一个简单的API。

我已经创建了一个应用程序服务,由于我在将Android本机应用程序连接到该服务的后端时遇到一些困难,因此我首先尝试了一个简单的测试。

我已经通过门户使用以下代码创建了一个名为from queue import Empty def do_multithreading(batches, counter, lock, proc): """Starts the multithreading""" # Set the number of threads. number_of_threads = 5 # Initializes the queue. for batch in batches: task_queue.put(batch) # Starts the multithreading for i in range(number_of_threads): t = threading.Thread(target=manage_queue, args=[ task_queue, counter, lock, proc]) t.daemon = True t.start() task_queue.join() def manage_queue(task_queue, counter, lock, proc): while True: try: user = task_queue.get(False) except Empty: break try: get_tweet_objects(user, counter, lock, proc) except Exception as exc: print(exc) finally: task_queue.task_done() def process_tasks(task_queue, counter, lock): logger = multiprocessing.get_logger() proc = os.getpid() while True: try: user = task_queue.get(False) except Empty: break try: do_multithreading(user, counter, lock, proc) except Exception as e: logger.error(e) logger.info(f'Process {proc} completed successfully') return True 的{​​{1}},

Easy API

此api不需要身份验证(一切都定义为test_api1)。

当我简单地通过浏览器调用它(通过转到module.exports = { "get": function (req, res, next) { res.status(200).type('text').send("1"); }, "post": function (req, res, next) { res.status(200).type('text').send("2"); } }; 时),可以按预期在浏览器中看到anonymous

但是,当我尝试通过应用程序调用API时,出现错误。这是我用来调用API的代码:

https://*.azurewebsites.net/api/test_api1

1是通过 private void testAPI() { Log.d(LOG_TAG, "Running API"); ListenableFuture<JsonElement> res = this.azureClient.invokeApi("test_api1"); Futures.addCallback(res, new FutureCallback<JsonElement>() { @Override public void onSuccess(@Nullable JsonElement result) { Log.d(LOG_TAG, "success"); if (result != null) { Log.d(LOG_TAG, result.toString()); } } @Override public void onFailure(Throwable t) { Log.e(LOG_TAG, "failure", t); } }); } 通过以下方式启动的:

this.azureClient

当我运行该应用程序时,出现以下错误:

MainActivity

谢谢!

1 个答案:

答案 0 :(得分:0)

这似乎是网络问题,并且由于与网络相关的问题,客户端无法解决此错误。但是,您可以做的是重试连接几次。在解决实际问题之前,这可能是一种解决方法。

示例代码:

for (int retries = 0; retries < 3; retries++) {
    try {
        final HttpClient client = createHttpClientWithDefaultSocketFactory(null, null);
        final HttpResponse response = client.execute(get);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            throw new IllegalStateException("GET Request on '" + get.getURI().toString() + "' resulted in " + statusCode);
        } else {                
            return response.getEntity();
        }
    } catch (final java.net.SocketTimeoutException e) {
        // connection timed out...let's try again                
    }
}

有效处理此问题的一种方法是定义一个连接超时,然后再使用try catch块进行处理。...希望这将对以后遇到相同问题的任何人有所帮助。

HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000); //set the timeout in milliseconds

希望有帮助。