PDA

View Full Version : time out در asynctask



sajadpm
سه شنبه 22 مرداد 1392, 00:14 صبح
با سلام و خسته نباشید

دوستان من در پروزه ام از asynctask استفاده می کنم که الان می خواهم وقتی مثلا بعد از 5 ثانیه اطلاعاتی دریافت نکرد asynctask متوقف بشه بعد toast نمایش داده بشه که دوباره تلاش کنه برای دریافت اطلاعات ! مثل برنامه های که از وب سرور اطلاعات ( بازار ) میگیرند . با تشکر

rubiks.kde
سه شنبه 22 مرداد 1392, 14:36 عصر
اگه توی این آسینک میخواهید از اینترنت داده بگیرید گزینه time out روی کانکشن بزارید تا بعد از اون زمان داده نگیره و یه مقدار رو برگردونه که مشخص بشه time out شده و پیغام رو نمایش بدید.
ولی اگه این طور نیست با شروع آسینک یه تایمر راه بندازید و بعد از اون زمان آسنیک رو چک کنید ببینید اطلاعات رو گرفته که هیچ والا پیغام رو بدید.

sajadpm
سه شنبه 22 مرداد 1392, 16:48 عصر
ابتدا خیلی از پاسخ شما سپاس گزارم , بله من اطلاعات رو از وب سرور طریق json دریافت میکنم بنده از کلاس json object استفاده میکنم آیا میشه باز هم از روش کانکشن استفاده کرد ؟ مثالی در این زمینه پیدا کردم : http://www.mysamplecode.com/2011/09/android-asynctask-httpclient-with.html آیا منظور شما هم همینطور است ؟

rubiks.kde
سه شنبه 22 مرداد 1392, 17:33 عصر
بله دقیقا همین طور.

ولی فک کنم شما هدفتون اینه که وقتی دارید اطلاعات رو میگیرد از سرور اگه سرور خیلی دیر جواب بده یا سرور در اون زمان قادر به پاسخگویی نباشه و شما هم نتونید اطلاعات رو بگیرید یه پیغام بدید که کاربر متوحه بشه اطلاعات دریافت نشده. درسته؟

برای مثال من خودم به این صورت استفاده میکنم.
public static JSONArray getJSONFromUrl(String url) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

} catch (Exception e) {
e.printStackTrace();
}

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
try {
jObj = new JSONArray(json);
} catch (Exception e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObj;

}
}


این تابع همیشه یا null برمیگردونه یا مقدار درست رو .حالا توی asynctask اگه null برگرده پیغام میدم که اطلاعات نیومده و یا هر پیغام دیگه