ورود

View Full Version : اطمینان از لود txt از نت



Amin-rz
یک شنبه 20 مهر 1393, 19:18 عصر
سلام.
من با این کد یه txt رو از نت می خونم :

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet("http://www.smsbaaz.ir/admin/smsbaaz/smsbaaz.txt");
HttpResponse response = null;
try {
response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpEntity ht = response.getEntity();

BufferedHttpEntity buf = null;
try {
buf = new BufferedHttpEntity(ht);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

InputStream is = null;
try {
is = buf.getContent();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

BufferedReader r = new BufferedReader(new InputStreamReader(is));

StringBuilder total = new StringBuilder();
String line;
try {
while ((line = r.readLine()) != null) {
total.append(line + "\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

String smsbaaz = total.toString();


باید مطمئن بشم که متن به طور کامل لود شده بعد کارهای بعدی رو انجام بدم.
چطور میشه مطمئن شد؟
مثلا وقتی مشکلی پیش میاد و نمیتونه txt رو از نت بگیره به جاش متن : <HTML></HTML> رو بر می گردونه.

pbm_soy
دوشنبه 21 مهر 1393, 00:03 صبح
فایلهای متنی را با فرمت خاصی مقداردهی کنید مثلا آخر فایل متنی یک علامت مثل #@# ذخیره کنید و زمانی که فایل را لود کردید سه بایت آخر آن را چک کنید ببینید علامت انتهای فایل وجود دارد یا خیر؟ اگر وجود داشت پس میتوانیدد نتیجه بگیرید که فایل کامل و بدون مشکل لود شده است. (البته در انتهای تمام فایلها علامت مخفی EOF نیز وجود دارد از اون هم می توانی استفاده کنی)

راههی دیگری نیز می تواند وجود داشته باشد مثلا کنترل کردن حجم داده های لود شده (البته اگه شرایطش وجود داشته باشد)

Amin-rz
دوشنبه 21 مهر 1393, 07:14 صبح
ممنون.روش خوبيه.
با چه كدي مي تونم بفهمم مثلا سومين كاراكتر متن چيه؟

بعد يه كم درباره EOF توضيح ميدي؟

raha_jon
دوشنبه 21 مهر 1393, 08:02 صبح
اگه از چند نخی استفاده نکنی برنامت هنگ میکنه

pbm_soy
سه شنبه 22 مهر 1393, 02:13 صبح
بله طبق گفته دوستمون باید از چند نخی استفاده کنی در غیراینصورت چندلحظه قفل میکند! برای اینکار یا باید بخشی درخواست را به اینترنت میفرستد را در یک asyncTask بذاری یا در یک Runnable بذار

برای چک کردن سه حرف آخر یک رشته از متد substring باید استفاده کنی (در انتهای برنامه خودت) سه حرف آخر متغییر smsbaaz را چک کن

String mySignToCheck = smsbaaz.substring(smsbaaz.length()-3);
if(mySignToCheck.equals("#@#"))
{
// file is ok
}

tresa022
سه شنبه 22 مهر 1393, 02:55 صبح
چرا داده هاتو به json encode نمیکنی؟؟؟؟؟

Amin-rz
سه شنبه 22 مهر 1393, 09:27 صبح
در مورد AsyncTask
, Runnable هم مي توني يه مثال بدي؟
هر چي گشتم همش توضيح بود.
متوجه كليت شدم ولي مثالي نديدم.
و اينكه thread بهتره يا AsyncTask
يا Runnable ؟

StoPpeR
سه شنبه 22 مهر 1393, 12:55 عصر
در مورد AsyncTask
, Runnable هم مي توني يه مثال بدي؟
هر چي گشتم همش توضيح بود.
متوجه كليت شدم ولي مثالي نديدم.
و اينكه thread بهتره يا AsyncTask
يا Runnable ؟

بنظر من بهترین راه برای چندنخی که بدون توجه به حجم کار همه جا جواب بده و بیشترین انعطاف پذیری رو هم داشته باشه AsynkTaskـه
برای مثال هم این یکی از مثال های خوبشه که یه آهنگ رو در پس زمینه دانلود می کنه و وقتی دانلود به پایان رسید پخش می کنه و البته هنگام دانلود یه progressbar رو هم نشون می ده که نسبت به حجم دانلود شده پر میشه:
http://programmerguru.com/android-tutorial/android-asynctask-example
به سه دستور onPreExecute، doInBackground و onPostExecute کاملا دقت کن که مهمترین مراحل کار هستن
اگر جاییش سوال داشتی بپرس

raha_jon
چهارشنبه 23 مهر 1393, 07:58 صبح
منو دانلود کردم اما پروسس بارس کار نمی کنه:گریه: