【发布时间】:2016-01-27 15:06:05
【问题描述】:
我正在开发一个从网络检索数据、将它们存储到设备然后读取它们的应用程序。 问题是,我在异步任务中获取数据。我的应用程序在尝试向用户显示数据之前没有让任务完成。 我试过 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 没有做任何事情,因为我没有返回任何我猜的东西。
【问题讨论】:
-
这是每次用户使用您的应用程序时都需要做的事情,还是数据下载到设备一次并保存?
-
保存一次,除非用户要求应用重新加载来自网络的数据或数据过期(一周后)
-
“我的应用程序在尝试向用户显示数据之前没有让任务完成”到底是什么意思?如@Matias Elorriaga 回答所示,是否在 onPostExecute() 中触发了 gui 更新。可以添加 onPostExecute() 的代码和 gui 更新代码吗?
-
还有
saveOptions这个方法有什么作用呢?您如何保存选项? -
saveOptions() 只是将数据写入设备上的 xml 文件中。
标签: java android android-asynctask