java - 如何让异步任务在 Android 中完成

标签 java android android-asynctask

我正在开发一个从网络检索数据、将它们存储到设备然后读取它们的应用程序。 问题是,我在异步任务中获取数据。我的应用程序在尝试向用户显示数据之前不会让任务完成。 我试过 task.get() 但没有结果(它就停在那里)。

这是我的任务:

public GetOptionsTask(XMLPortalGetOptions request) {
        super(request);
    }
    protected void onCancelled(){
        // TODO afficher message pas d'options sur le disque
    }
    @Override
    public void handleError(Transaction transaction) {
        // TODO afficher message pas d'options sur le disque
    }
    @Override
    public void handleSuccess(Transaction transaction) {
        saveOptions(transaction.getResponse());
        request = null;
        Log.d(OptionsManager.class.getName(), this.getStatus().toString());
    }

此任务是我的自定义异步任务的一个实例:

protected BaseXMLTransaction request;

public abstract void handleError(Transaction transaction);
public abstract void handleSuccess(Transaction transaction);
public TransactionTask(BaseXMLTransaction request){
    this.request = request;
}
@Override
protected Void doInBackground(Void... params) {
    try {
        Log.i(TransactionTask.class.getName(), "Doing in background");
        SocketHandler.sendTransaction(this, request.getRequest());
    } catch (SocketHandlerNotConfiguredException e) {
        Log.e(TransactionTask.class.getName(), "SocketHandler's parameters were not set.");
    }
    return null;
}
@Override
public void transactionResult(Transaction transaction) {
    switch (transaction.getCode()) {
        case ERROR:
            Log.e(TransactionTask.class.getName(), "ERROR !!!");
            handleError(transaction);
            break;
        case NO_CLIENT:
            Log.e(TransactionTask.class.getName(), "No Client Error");
            handleError(transaction);
            break;
        case NO_SERVER:
            Log.e(TransactionTask.class.getName(), "No Server Error");
            handleError(transaction);
            break;
        case OLD_VERSION:
            Log.e(TransactionTask.class.getName(), "Old Version");
            handleError(transaction);
            break;
        case TIMEOUT:
            Log.e(TransactionTask.class.getName(), "Transaction Timeout");
            handleError(transaction);
            break;
        case SUCCESS:
            Log.i(TransactionTask.class.getName(), "Transaction Success");
            handleSuccess(transaction);
    }
}

我真的不知道该怎么做...执行速度很快,get 什么也没做,因为我猜我不会返回任何东西。

最佳答案

onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.

@Override
protected void onPostExecute(String result) {

}

关于java - 如何让异步任务在 Android 中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040889/

相关文章:

java - 为什么我的 JavaCL 只检测到集成显卡?

java - 具有高级功能的 Android Eclipse 项目布局

Java Streams with Optional 转换的工作原理

android - 从 AsyncTask 检索对象值

java - 获取 ImageView 可绘制 ID 并使用 AsyncTask 更改它

java - 恢复用户图像后如何将其保存在 Drawable 中

android - 如何在 Android 中管理相机快门速度和光圈?

android - 在 rajawali android 的表面 View 上渲染与原始图像大小相同的图像

android - 我应该在哪里写一个临时文件?

java - RecyclerView使用AsyncTask分页制作重复页面?