在 AsyncTask 中等待回调
Wait for Callback inside AsyncTask
我想在 AsyncTask
做一些工作,包括一些下载小文件的服务器请求。下载完成后,继续 AsyncTask
中的逻辑,当所有内容完成后,我在 activity 中得到结果。一切正常,但我的 AsyncTask
没有等待回调方法:
public class AsyncOperation extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
String linkUrl = params[0];
functionDoStuff(linkUrl);
return "Executed";
}
public void functionDoStuff(String urlLink) {
... code ...
String str = getFile(urlLink);
!!! is not waiting for result !!!
... use 'str' ...
}
private String getFile(String urlLink) {
String savedFileDestination = null;
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(urlLink")
.build();
client.newCall(request).enqueue(new com.squareup.okhttp.Callback() {
@Override
public void onFailure(Request request, IOException e) {
//something goes wrong
}
@Override
public void onResponse(com.squareup.okhttp.Response response) throws IOException {
//get stream
InputStream inputStream = response.body().byteStream();
//this method save file and return file path
savedFileDestination = saveFileMethod(inputStream);
}
});
return savedFileDestination;
}
}
如何等待此回调继续 functiobDoStuff()
中的逻辑?
将所有内容放入 onResponse method.Because onResponse 方法异步工作
@Selvin 是对的,我必须提出我的请求 同步 我的 'waiting problem' 不见了!
唯一的变化是 getFile()
方法,它应该是这样的:
private void getFile(String urlLink) {
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(urlLink)
.build();
try {
Response response = client.newCall(request).execute();
if (response!=null){
InputStream inputStream = response.body().byteStream();
saveFile(inputStream);
}
} catch (IOException e) {
e.printStackTrace();
}
}
我想在 AsyncTask
做一些工作,包括一些下载小文件的服务器请求。下载完成后,继续 AsyncTask
中的逻辑,当所有内容完成后,我在 activity 中得到结果。一切正常,但我的 AsyncTask
没有等待回调方法:
public class AsyncOperation extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
String linkUrl = params[0];
functionDoStuff(linkUrl);
return "Executed";
}
public void functionDoStuff(String urlLink) {
... code ...
String str = getFile(urlLink);
!!! is not waiting for result !!!
... use 'str' ...
}
private String getFile(String urlLink) {
String savedFileDestination = null;
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(urlLink")
.build();
client.newCall(request).enqueue(new com.squareup.okhttp.Callback() {
@Override
public void onFailure(Request request, IOException e) {
//something goes wrong
}
@Override
public void onResponse(com.squareup.okhttp.Response response) throws IOException {
//get stream
InputStream inputStream = response.body().byteStream();
//this method save file and return file path
savedFileDestination = saveFileMethod(inputStream);
}
});
return savedFileDestination;
}
}
如何等待此回调继续 functiobDoStuff()
中的逻辑?
将所有内容放入 onResponse method.Because onResponse 方法异步工作
@Selvin 是对的,我必须提出我的请求 同步 我的 'waiting problem' 不见了!
唯一的变化是 getFile()
方法,它应该是这样的:
private void getFile(String urlLink) {
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(urlLink)
.build();
try {
Response response = client.newCall(request).execute();
if (response!=null){
InputStream inputStream = response.body().byteStream();
saveFile(inputStream);
}
} catch (IOException e) {
e.printStackTrace();
}
}