【发布时间】:2016-01-09 09:16:24
【问题描述】:
我试图在使用asynctask 进行 API 调用时显示进度对话框。问题是除非 API 调用完成,否则 ProgressDialog 不会出现。
这是异步任务代码:
public class GetAPIResponse extends AsyncTask<APIRequestModel, Void, String> {
/**
* Global instance of the HTTP transport.
*/
private final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
Gson gson = new Gson();
public AsyncResponse delegate = null;
Context context;
private ProgressDialog mLoadingDialog;
private Handler mHandler = new Handler();
private void showLoadingDialog(final String title, final String msg) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (mLoadingDialog == null) {
mLoadingDialog = ProgressDialog.show(context, title, msg);
}
mLoadingDialog.setTitle(title);
mLoadingDialog.setMessage(msg);
}
});
}
private void hideLoadingDialog() {
mHandler.post(new Runnable() { //Make sure it happens in sequence after showLoadingDialog
@Override
public void run() {
if (mLoadingDialog != null) {
mLoadingDialog.dismiss();
}
}
});
}
public GetAPIResponse(Context context)
{
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
showLoadingDialog("", "Creating your account");
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
hideLoadingDialog();
}
@Override
protected String doInBackground(APIRequestModel... params) {
String result = "";
try {
HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
HttpRequest request = httpRequestFactory
.buildGetRequest(new GenericUrl(params[0].RequestUrl));
request.getUrl().put("json", gson.toJson(params[0].KeyValuePair));
result = request.execute().parseAsString();
} catch (Exception e) {
Log.e("GetAPIResponse:", e.getMessage());
}
return result;
}
public HttpRequestFactory createRequestFactory(
final HttpTransport transport) {
return transport.createRequestFactory(new HttpRequestInitializer() {
public void initialize(HttpRequest request) {
GoogleHeaders headers = new GoogleHeaders();
request.setHeaders(headers);
JsonHttpParser parser = new JsonHttpParser(new JacksonFactory());
request.addParser(parser);
}
});
}
}
谢谢。
【问题讨论】:
标签: android android-asynctask progressdialog