我正在尝试使用Okhttp库通过API将我的Android应用程序连接到服务器。
单击按钮就会发生我的API调用,并且我收到以下 android.os.NetworkOnMainThreadException
。我了解这是由于我正在尝试在主线程上进行网络调用,但是我也正努力在Android上寻找一种干净的解决方案,以使该代码如何使用另一个线程(异步调用)。
@Override
public void onClick(View v) {
switch (v.getId()){
//if login button is clicked
case R.id.btLogin:
try {
String getResponse = doGetRequest("http://myurl/api/");
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
String doGetRequest(String url) throws IOException{
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
上面是我的代码,并且在行上抛出了异常
Response response = client.newCall(request).execute();
我还读到Okhhtp支持Async请求,但是我真的找不到适用于Android的干净解决方案,因为大多数人似乎都在使用使用 AsyncTask
<>
的新类?
要发送异步请求,请使用以下命令:
void doGetRequest(String url) throws IOException{
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(final Call call, IOException e) {
// Error
runOnUiThread(new Runnable() {
@Override
public void run() {
// For the example, you can show an error dialog or a toast
// on the main UI thread
}
});
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
String res = response.body().string();
// Do something with the response
}
});
}
并这样称呼:
case R.id.btLogin:
try {
doGetRequest("http://myurl/api/");
} catch (IOException e) {
e.printStackTrace();
}
break;
本文向大家介绍JavaScript 异步调用,包括了JavaScript 异步调用的使用技巧和注意事项,需要的朋友参考一下 问题 可修改下面的 aa() 函数,目的是在一抄后用 console.log() 输出 want-value 但是,有额外要求: aa() 函数可以随意修改,但是不能有 console.log() 执行 console.log() 语句里不能有 setTimeout 包裹 解
Provider端异步执行将阻塞的业务从Dubbo内部线程池切换到业务自定义线程,避免Dubbo线程池的过度占用,有助于避免不同服务间的互相影响。异步执行无益于节省资源或提升RPC响应性能,因为如果业务执行需要阻塞,则始终还是要有线程来负责执行。 注意:Provider端异步执行和Consumer端异步调用是相互独立的,你可以任意正交组合两端配置 Consumer同步 - Provider同步 C
从v2.7.0开始,Dubbo的所有异步编程接口开始以CompletableFuture为基础 基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。 使用CompletableFuture签名的接口 需要服务提供者事先定义CompletableFuture签名的服务,具体参见服务端异步执行接口定义: public interface Asyn
同步调用异步方法最安全的方法是什么?
我有一个由S3推送事件触发的AWS Lambda。lambda将调用一个API,这将触发一个长时间运行的进程。我认识到我可以配置S3异步调用lambda函数,因此S3不会等待响应,但我很想知道我是否可以配置lambda异步调用我的API。我不希望lambda在过程完成时等待几分钟。有人能给我指出一些概述这个过程的留档吗?提前谢谢。