آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل با AsyncTask و ProgressDialog فوری

احمد  10 سال پیش  10 سال پیش
0 0

سلام من یه AsyncTask دارم که داخلش یه ProgressDialog نشون میدم تا کارش تموم بشه گاهی درست کار می کنه گاهی خطای هندلر اینساید ترد میده

بهترین روش چیه که همه جا بتونم از این قطعه کد استفاده کنم 

 	class UpdateFromWeb extends AsyncTask<String, String, String> {

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			try {
				progressDialog2 = new ProgressDialog(G.CurrentActivity);
				progressDialog2.setMessage(message);
				progressDialog2.setIndeterminate(false);
				progressDialog2.setCancelable(false);
				progressDialog2.show();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		private void UpdateList() {
			SQLiteDatabase db = G.dbHelper.getReadableDatabase();
			if ((G.database == null) || (G.database.isOpen() == false)) {
				G.database = G.dbHelper.getWritableDatabase();
			}
				String Sql = "Delete from  KalaId ";
			List<NameValuePair> params = new ArrayList<NameValuePair>();
				params.add(new BasicNameValuePair("Req", "K"));
			params.add(new BasicNameValuePair("Res", "A"));

			JSONObject json = jParser.makeHttpRequest(url, "POST",
					params);
			try {
				int success = json.getInt(TAG_SUCCESS);
				if (success == 1) {
					jK = json.getJSONArray(TAG);
					for (int i = 0; i < jk.length(); i++) {
						JSONObject c = jK.getJSONObject(i);
						String Code = c.getString(Code);
						String Name = c.getString(Name1);
						String s = "error";
						try {
							ContentValues cv = new ContentValues();
							cv.put("Code", Code);
							cv.put("Name1", Name1);

							db.insert("Id", null, cv);
						} catch (NullPointerException exception) {
							exception.printStackTrace();
						} catch (Exception e) {
							s = "error";
						}
					}
				}

			} catch (JSONException | IllegalStateException e) {
				e.printStackTrace();
				db.close();
			}

		}

		@Override
		protected String doInBackground(String... args) {
				publishProgress(message);
				UpdateList();

			return null;
		}

		@Override
		protected void onProgressUpdate(String... values) {
			super.onProgressUpdate(values);
			try {
				progressDialog2.setMessage(values[0].toString());
			} catch (NullPointerException e) {
				e.printStackTrace();
			}

		}

		@Override
		protected void onPostExecute(String file_url) {
			try {
				progressDialog2.dismiss();
			} catch (NullPointerException e1) {
				e1.printStackTrace();
			}
			try {
				((ActivityMain) context).showdata();
			} catch (ClassCastException e) {
				e.printStackTrace();
			}
		};
	}

تقریبا همه جا به همین شکل نوشتم 

0 0
شما ProgressDialog ساخته شده رو درون یک ترد قرار دهید و بجای try catch از Handler استفاده کنید چون که از خاصیت set که فقط مختص به Thread UI هست استفاده کردین، اگه بازم خطا وجود داشت try catch رو مجددا بزارید ! (10 سال پیش)
0 0
میتونی یه مثال بهم بدی روی همین کد (10 سال پیش)
0 0
کسی می تونه مثالی برام بزنه (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .