我有一个 LoginTask 类,它是AsyncTask的子类。我用它来执行登录功能。我的 LoginTask 就像这样
class LoginTask extends AsyncTask<JsonObject,Void,String>{
@Override
protected void onPreExecute() {
//Codes to show progressDialog
}
@Override
protected String doInBackground(JsonObject... params) {
Ion.with(MainActivity.this)
.load("--URL TO POST JSON DATA--")
.setJsonObjectBody(params[0])
.asJsonObject()
.withResponse()
.setCallback(new FutureCallback<Response<JsonObject>>() {
@Override
public void onCompleted(Exception e, Response<JsonObject> result) {
if (result != null) {
if (result.getHeaders().code() == 200) {
Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_SHORT).show();
} else if (result.getHeaders().code() == 401) {
Toast.makeText(MainActivity.this, "Invalid Username or password", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Something wrong check connection !!!", Toast.LENGTH_SHORT).show();
}
}
}
});
return "some message";
}
@Override
protected void onPostExecute(String string) {
super.onPostExecute(string);
if(progressDialog.isShowing()){
progressDialog.dismiss();
//TODO Something
}
}
}
我想要什么,发生了什么:
onPostExecute
方法获取结果后调用FutureCallback
但是当我调试应用程序时它直接返回值onPostExecute
方法,在{{1}之前立即调用方法。FutureCallback
,但问题是 ProgressDialog 仅在第一次显示时,我第二次按下按钮时没有出现。ProgressDialog
方法,以便我可以根据String参数的值处理特定任务,但只有在执行完整个后才调用onPostExecute
任务。 我们将不胜感激任何建议。
答案 0 :(得分:2)
这里你在调用asynctask中的另一个线程。所以最新发生的事情就是新线程被调用。 Asynctask不是在等待你的离线线程完成,因此它将进入onPostExecute。
我认为你不需要这里的asynctask因为Ion已经异步地提出了请求。无论你在onPostExecute()中做什么,你都可以把它放在离线调用的onComplete()中。
答案 1 :(得分:1)
这样做,
string = ''
for letter in a:
string += letter
答案 2 :(得分:1)
onCompleted()
方法的 setCallback()
方法是一个异步调用的回调方法,因此当从服务器返回响应时将调用此回调,这需要时间,这就是为什么{{{在onPostExecute
之前调用方法。
futureTask
lib已经使用异步调用,因此您不需要使用AsyncTask。您只需要执行以下操作:
Ion