【发布时间】:2015-09-03 16:12:16
【问题描述】:
我目前正在创建一个 Android 应用,但遇到了一个问题,我还没有解决。
我使用 Retrofit 库向服务器发送请求,根据 Retrofit 库,它是在后台线程中完成的。
我在主线程中调用了这个改造请求,我想等待这个后台线程完成以便处理它的输出。
我在论坛上发现了一个类似的问题,但我不知道如何实现: Android: how to wait AsyncTask to finish in MainThread?
我用Retrofit调用请求,请求完成后,Callback对象的success方法启动,但主线程仍在运行,到达后台前的最后一行任务已完成。
如何强制我的主线程等待后台任务完成?
我的代码:
// ... (main thread)
// CALL TO THE SERVER
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(LoginScreen.ENDPOINT).build();
WebServices getFiles = restAdapter.create(WebServices.class);
Callback<Response> callback = new Callback<Response>()
{
@Override
public void success(Response s, Response response)
{
fileAvailable = new String(((TypedByteArray) s.getBody()).getBytes());
//THIS IS EXECUTED WHEN THE BACKGROUND TASK IS FINISHED
}
@Override
public void failure(RetrofitError retrofitError)
{
Log.e(TAG, retrofitError.toString());
}
};
getFiles.getFiles(id, callback);
// I want here to work with fileAvailable, but the code
// reaches this line before the background task is over.
我尝试像上一个链接一样创建一个Handler对象,并在success方法中调用sendEmptyMessage,但是没有成功。
如果有人可以帮助我,我将非常感激。
提前谢谢你,
【问题讨论】:
-
有一种方法可以强制您的主线程阻塞,但这不是一个好主意,Android 系统可能会杀死您的应用程序。您可以使用倒计时闩锁或等待/通知调用来执行此操作。
标签: java android multithreading android-asynctask