如何让Async Task在Android中完成

deq*_*c64 5 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());
    }
Run Code Online (Sandbox Code Playgroud)

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道该怎么做......执行变得快而且得不到任何事情,因为我没有回复任何我猜.

seb*_*neo 1

onPostExecute(Result),在后台计算完成后在 UI 线程上调用。后台计算的结果作为参数传递到此步骤。

@Override
protected void onPostExecute(String result) {

}
Run Code Online (Sandbox Code Playgroud)