PDA

View Full Version : ایجاد dialog تا زمان دریافت داده ها؟



esmaeilbf
یک شنبه 17 فروردین 1393, 12:46 عصر
سلام
یک وب سرویس هست که داده ها رو به صورت json از سرور می فرسته به برنامه و اونجا دریافت میشه و داخل یک لیست ویو نمایش داده میشه چیزی مثله rss reader
میخوام تا زمانی که داده ها دریافت نشدن و داخل لیست ویو قرار نگرفتن یه dialog نشون بدم
سرچ کردم به نتیچه نرسیدم اگر چنین موضوعی قبلا مطرح شده لطفا لینکش رو بدین
با تشکر

Nevercom
دوشنبه 18 فروردین 1393, 01:48 صبح
فرض بر این هست که از AsyncTask برای خوندن اطلاعات ار سرور استفاده می کنید، کد های اصلی رو در متد doInBackground می نویسید.
دو متد دیگه هم موجود هست، onPreExecute و onPostExecute
همونطور که از اسمشون مشخص هست، onPreExecute قبل از متد doInBackground اجرا میشه، در این متد شما یه Dialog ایحاد می کنی و نمایشش میدی.
در onPostExecute هم متد cancel. رو برای شئ Dialog که قبلاً ایجادش کردی صدا میزنی.

esmaeilbf
دوشنبه 18 فروردین 1393, 10:15 صبح
با تشکر
من از این روش استفاده نمیکنم
در واقع یک وب سرویس نوشتم که با استفاده از متد post به سرور درخواست می فرسته و داده ها رو با استفاده از inputStream دریافت میکنه

Nevercom
دوشنبه 18 فروردین 1393, 11:27 صبح
من در مورد روش ارسال و دریافت صحبت نکردم، اما شما که این کدها رو که تو Thread اصلی اجرا نمی کنید. یکی از راه هاش اینه که از AsyncTask استفاده کنید.
شما نمونه کد رو بزارید، تا بررسی کنیم.

esmaeilbf
دوشنبه 18 فروردین 1393, 11:36 صبح
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_content);


ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterItems(Item.text);
lstContent.setAdapter(adapter);
Commands.read();
adapter.notifyDataSetChanged();


}
این یک اکتیویتی هست که با استفاده از متد read() داده ها رو دریافت میکنه و در listview نمایش میده

esmaeilbf
سه شنبه 19 فروردین 1393, 22:59 عصر
up:)
help me please

Nevercom
چهارشنبه 20 فروردین 1393, 00:50 صبح
دقیقتر سوالتون رو مطرح کنید پاسخ های دقیقتری دریافت می کنید

این سوال شما رو من به دو شکل برداشت می کنم:

قصد دارید زمانی که درخواست رو برای سرور ارسال کردید، تا زمان دریافت پاسخ از سرور یک دیالوگ (مثلاً Loading) نمایش بدید و وقتی پاسخ دریافت شد، دیالوگ کنسل بشه
اگر درون ListView داده ای برای نمایش وجود نداشت، یک دیالوگ نمایش بدید (مثلاً دیالوگی بیاد بگه اطلاعاتی موجود نیست و باید رفرش کنید)


من تصور می کنم سوال شما گزینه ی اول هست بر اساس اون پاسخ دادم
این کد رو ببینید:

private class AsyncSignUp extends AsyncTask<String, Void, JSONObject> {
private final CallBackListener IListener;
private ProgressDialog pdia;


public AsyncSignUp(CallBackListener ilistener) {
IListener = ilistener;
}


@Override
protected JSONObject doInBackground(String... params) {
try {
final String username = params[0];
final String password = params[1];


final JSONObject json = new JSONObject();



json.put(Constants.JS_APP_PHONE, username);
json.put(Constants.JS_APP_PASS, password);
json.put(Constants.JS_APP_EMAIL, utils.getEmail());
json.put(Constants.JS_APP_ANDROID_VER, utils.getAndroidVersion());
json.put(Constants.JS_APP_APP_VER, utils.getAppVersion());


final String response = poster.getServerResponse(poster.postData(
Constants.SERVER_URL, json, Constants.TAG_SIGNUP));
final JSONObject jsonResponse = new JSONObject(response);
return jsonResponse;
} catch (final JSONException e) {
e.printStackTrace();
} catch (final IllegalStateException e) {
e.printStackTrace();
} catch (final UnsupportedEncodingException e) {
e.printStackTrace();
} catch (final ClientProtocolException e) {
e.printStackTrace();
} catch (final IOException e) {
e.printStackTrace();
} catch (final NameNotFoundException e) {
e.printStackTrace();
}
return null;
}


@Override
protected void onPostExecute(JSONObject result) {
pdia.dismiss();
IListener.onServerResponse(result);
super.onPostExecute(result);
}


@Override
protected void onPreExecute() {
pdia = new ProgressDialog(parent);
pdia.setMessage("Loading...");
pdia.setCancelable(false);
pdia.show();
super.onPreExecute();
}


}



در این کد با احرای AsyncTask یک ProgressDialog نمایش داده میشه و تا زمانی ادامه داره که اطلاعات از سرور دریافت بشه، اون موقع دیالوگ کنسل میشه و نتیجه یه درخواست دهنده ارسال میشه تا در ListView نمایش داده بشه