我做了一个asynctask从webservice获取一些Json响应。我在显示后台处理时使用了一个进度条,并完成了我的asynctask.Thing的onPostExecute方法中的进度对话是我得到了成功的响应根据需要,但是myl进度对话在此之后仍然可见,请任何人告诉我如何解雇它。我的代码如下: 的 main.java
私有类DoFavourite扩展了AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(ProductDetailActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
String favUrl = Const.API_DO_FAVOURITE + "?product_id=" + pid + "&customer_id=" + Pref.getValue(ProductDetailActivity.this, Const.PREF_CUSTOMER_ID, "");
System.out.println(":::::::::my FAVOURITE URL::::::::::::::" + favUrl);
// Creating service handler class instance
BackendAPIService sh = new BackendAPIService();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(favUrl, BackendAPIService.GET);
Log.d("Response: ", "> " + jsonStr);
System.out.println("=============MY RESPONSE==========" + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
if (jsonObj.has(Const.TAG_STATUS)) {
if (jsonObj.getString(Const.TAG_STATUS).equalsIgnoreCase("success")) {
if (jsonObj.getString(Const.TAG_FAVOURITE).equalsIgnoreCase("1")) {
flag = 1;
} else {
flag = 2;
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
}
}
答案 0 :(得分:0)
您没有正确使用进度对话框。您会注意到IDE在pd.show(...)行旁边显示一个简洁的小警告标志。
你在做什么
使用新的ProgressDialog()
创建一个(不可见的,不相关的)进度对话框使用pd.Show()创建带有所需文本的另一个进度对话框,而不存储对它的引用。
关闭第一个对话框。 (2)中的对话框仍然存在。
如果您用以下代码替换代码:
//pd = new ProgressDialog(this);
pd = ProgressDialog.show(this, "Waiting...", "Please wait five seconds...");