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

محاسبه اندازه size جی سان دریافت شده

h_uk2009  11 سال پیش  11 سال پیش
+1 0

سلام میخواستم برای اینکه بتونم پروگرس بار درست کنم برای نمایش اطلاعات از وب به صورت جی سان اندازه جی سان رو بگیرم اومدم و این کد رو زدم توسط این کد ولی متاسفانه هربار به حجم method من اضافه میشه با هربار فراخوانی متد read استاد وقتی که مقدار method.getEntity.length رو تریس میکنم  انگار که حجم فایلهای دریافتی با سایز قبلی جمع میشه من کدم رو هم به نظرم درسته نمیدونم واقعا چشه کدی که برای گرفتن سایز ازش استفاده کردم اینه :

در این جا شاید لازمه که بگم همه این کارارو میخوام بکنم چون طبق پست قبلی که زدم سرعت اپلیکیشنم پایین میاد بعد یکی دوتا صدا زدن تابع read و برنامه رو دوستان پیشنهاد کردن که بیام و با اینترفیس و پروگرس هربار بخونم اطلاعاتو و لودینک واسش بزارم ولی خداوکیلی پدر منو در آورده این بار !

       HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost(url);
G.jsonSize = 0;
if (params != null) {
method.setEntity(new UrlEncodedFormEntity(params));
G.jsonSize = (int) method.getEntity().getContentLength() *1024;
Log.i(G.LOG_TAG, "سایز ورودی: " + G.jsonSize);
}
//int size = method.getEntity().getContentLength();

HttpResponse response = client.execute(method);
// G.jsonSize = (int) response.getEntity().getContentLength();
// Log.i(G.LOG_TAG, "sag 2: " + G.jsonSize);

InputStream inputStream = response.getEntity().getContent();
String result = convertInputStreamToString(inputStream);
return result;
0 0
یکی کمک ! (11 سال پیش)
0 0
یکی فقط به من بگه راهش جیه که برنامم کند نشه و لود کنتم اطلاعات جی سانو (11 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
h_uk2009  11 سال پیش
0 0

بچه ها من این کد رو زدم و تاحالاش درست بوده فقط مقدار کل داده json رو میخوام که بگیرم تا بتونم توی onprogres که نوشتم تقسیم کنم به مقدار داتلود شده ... مقدار دانلود شده رو با DownloadedSize کرفتم ولی یکی بکه چجور مقدار کل دریافتی جی سان رو بگیرم //////////////اینم کد :

           while ((line = reader.readLine()) != null) {
downloadedSize += line.length();
builder.append(line);
if (Listener != null)
{
final int finaldownloadedSize = downloadedSize;
G.handler.post(new Runnable() {

@Override
public void run() {
Listener.onProgressDownload(finaldownloadedSize);
}
});
}
0 0
سلام بچه ها لطفا به من بگین آیا ما باید از async کلاس استفاده کنیم ؟! (11 سال پیش)
0 0
یکی کمک کنه ! ! ! ! ! ! یکی فقط به من بگه من چحوری حجم جی سان گرفته شده رو کلشو همون اول به دست بیارم .. عحب فرومی شده دیکه کسی به کسی کمک نمیکنه ه هههههههههه (11 سال پیش)
0 0
دوست عزیز رشته json یک زمان دریافت میشه.کاری که میتونید انجام بدید اینه که کد رو ThreadBase کنید و نیازی به نمایش درصد دریافت json برای کاربر نیست.فقط به کار یک پیغام مثل : لطفا صبر کنید نمایش بده.البته میتونی از Async Task هم استفاده کنی. (11 سال پیش)
0 0
hamidd لطفا بگو طرز استفاده از async چجوریه .. و دو اینکه thread هم گداشتم ولی باور کن مشکل با ترد و مرد حل نمیشه ! سرعت رو توی نت که میزاری خیلی میاد پایین روانیم کرده لطفا کمک کن (11 سال پیش)
0 0
طرز استفاده از AsyncTask این لینک و این لینک رو ببینید.نیازی نیست از AsyncTask استفاده کنید.AsyncTask برای برنامه ی شما مناسب نیست همون Thread استفاده کنید مناسبه. AsyncTask ها از لحاظ ساختار برنامه نویسی، ساختار خوبی ندارن، به خاطر callback های زیاد و نوع آپدیت کردن ui ،که باید از متد publishProgress(); استفاده کرد و البته دلایل دیگه. (11 سال پیش)
پاسخ به سوال 
Hossein Kurd  11 سال پیش
0 0

شما طبق این مبحث عمل کن و کدها رو توی doInbackground قرار بده

 

فقط توی onPre و onPost می تونی با UI و کلیه TextView ها و ... کار کنی

کار خاصی نداره دو بار که انجام بدی عادت می کنی به AsyncTask

اما دیگه نیاز نیست handler استفاده کنی، کد handler رو پاک کن و فقط وظایش رو توی شرط if بذار چون AsyncTask اتوماتیک این کار رو انجام می ده

0 0
مرصی دست درست (11 سال پیش)
پاسخ به سوال 
h_uk2009  11 سال پیش
0 0

Hossein.Kurd عزیز من async رو پیاده سازی کردم فقط مسله اینه که پروگرس بار توی اسینگ فقط اسم اکتیویتی فعلی رو میگیره و من فقط متاسفاته از توی خود کلاس ActivityMain بهش دسترسی دارم ... مثلا یکی از مشکلاتی که دارم اینه که میخوام از توی adapter note هم آپدیتش کنم و نمیشه ...مسله دومم اینه که وقتی اسکرول میشه یک لیست دیگه دفعه بعدم همونجا مونده و نمیاد سر اسکرول ..  موندم چکار کنم کد هر بخشو میزارم ببین چه روشی برم بهتره :

کد قسمت اکتیویتی ActivityMain

    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

ProgressDialog dialog = new ProgressDialog(ActivityMain.this);


@Override
protected void onPreExecute() {
//set message of the dialog
ListView lstContent = (ListView) findViewById(R.id.LstContent);
G.adapter = new AdapterNote(G.notes);
lstContent.setAdapter(G.adapter);

dialog.setMessage("درحال بارگزاری");
//show dialog
dialog.show();
super.onPreExecute();
}


@Override
protected Void doInBackground(Void... arg0) {

params.add(new BasicNameValuePair("user_id", G.cellcode));
Commands.read(params, prgListener);
return null;
}


protected void onPostExecute(Void result) {
// do UI work here
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
if (G.getJsonString != null) {
try {

G.notes.clear();
JSONArray jsonnews = new JSONArray(G.getJsonString);
for (int i = 0; i < jsonnews.length(); i++) {
JSONObject object = jsonnews.getJSONObject(i);
StructNews note = new StructNews();
note.id = object.getInt("news_id");
note.pagenumber = object.getInt("page_number");
note.Title = object.getString("news_title");
note.description = object.getString("news_desc");
note.isfav = object.getInt("is_fav");
Log.i(G.LOG_TAG, "sss " + object.getString("news_title"));

G.notes.add(note);
}
G.adapter.notifyDataSetChanged();

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

}

}

}

};
task.execute((Void[]) null);
پاسخ به سوال 
Hossein Kurd  11 سال پیش
0 0

واسه ProgressBar :

dialog.show(ActivityMain.myActivity , "Title" , "Loading Please Wait" , true);
dialog.setCancaledOnTouchOutSide(false);

متغیر myActivity هم مثل G.currentActivity از نوع Activity هست ولی انحصارا برای ActivityMain ایجاد می شه ، شما می تونید حتی اون رو به Async تزریق کنید
برای اینکه شما فقط در صورت Lazy Loadin به اطلاعات رو Load کنید می تونید تعیین کنید هر وقت لیست ویو یه آخرین مقدار رسید (نمایش آخرین Item در ListView) از طریق Async اطلاعات رو فراخوانی کنید و "اضافه" کنید(آرایه رو پاک نکنید و اطلاعات رو اضافه کنید)


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