View Full Version : اجرای progressbar در هنگام استفاده از async task
tresa022
چهارشنبه 09 مهر 1393, 12:17 عصر
سلام بچه ها من یه لیست ویو شخصی دارم که یه سری لینک دانلود هستن و با کلیک کردن بر روی اونها دانلود صورت میگیره
تو این لیست ویو واسه هر سطر من یک progress bar قرار دادم که که میزان پیشرفت دانلود رو نمایش میده
مشکلی ک من دارم اینه که نمیدونم چطور در هنگام دانلود به progressbarمربوط سطر در حال دانلود دسترسی داشته باشم
یعنی وقتی من دان میکنم فقط اولی رو آپدیت میکنه
دوستانی که کار کردن لطفا راهنمایی کنن خیلی گشتم ولی چیزی پیدا نکردم
mfaridi
چهارشنبه 09 مهر 1393, 13:41 عصر
میتونی از یک ارایه کمک بگیری و مقادیرتو توی ارایه ذخیره کنی
tresa022
پنج شنبه 10 مهر 1393, 01:41 صبح
دوستان من مشکلم با پروگرس باره نه مقادیر
میخوام پروگرس بار در هنگام دانلود مرتب روند تغیر رو نشون میده
tresa022
پنج شنبه 10 مهر 1393, 15:14 عصر
اینجور میخوام باشه ببینید هر سطر چطور پرورگرس بارش جداگانه میره جلو
tresa022
پنج شنبه 10 مهر 1393, 15:29 عصر
یعنی خداییش کسی نمیدونه چطور اینکارو کنم؟؟؟
saeed_g21
پنج شنبه 10 مهر 1393, 15:46 عصر
یعنی خداییش کسی نمیدونه چطور اینکارو کنم؟؟؟
فکر کنم همچین چیزی در بخش نمونه ها هست پیداش کن نگاهی بنداز شاید الهامی بگیری
tresa022
پنج شنبه 10 مهر 1393, 15:55 عصر
اره هست اما اون اصلا متوجه نمیشم چکار کرده پروگرس بارشو توهزارتا تابع دور داده نفهمیدم چی ب چیه
از دوستانی که کار کردن ملتمسانه خواهش میکنم جواب بدید سه روزه گیرشم
tresa022
پنج شنبه 10 مهر 1393, 19:53 عصر
دوستان یه روش بدید
لطفا
Nevercom
پنج شنبه 10 مهر 1393, 19:56 عصر
کلاس AsyncTask متدی داره تحت عنوان onProgressUpdate که وظیفه ش گزارش روند پیشرفت هست و می تونید ازش استفاده کنید.
در روشی که شئ ProgressBar رو به کلاس پاس میدن، درواقع یک رفرنس از شئ رو به کلاس میدن تا خود کلاس اون شئ رو آپدیت کنه
tresa022
پنج شنبه 10 مهر 1393, 20:19 عصر
من همین کارو کردم اما انجام نمیشه
hamid_0341
جمعه 11 مهر 1393, 08:05 صبح
http://stackoverflow.com/questions/18069678/how-to-use-asynctask-to-display-a-progress-bar-that-counts-down
tresa022
جمعه 11 مهر 1393, 14:24 عصر
مرسی دوست عزیز ک پاسخ دادی این منم امتحان کردم جواب میده اما برای لیست ویو نمیدنم چطور بهش بگم ک هر سطر فقط ماله خودشو اجرا کنه
Amin-rz
جمعه 11 مهر 1393, 15:57 عصر
پروگرس بار رو تو آداپتر ليست ويو تعريف كن.
tresa022
شنبه 12 مهر 1393, 03:34 صبح
همین کارو کردم نشد این کدامه
class Adapter extends ArrayAdapter<datalist> {
private Activity ac;
private int list;
ImageView ax;
Holderin holder;
TextView filesize;
private ArrayList<datalist> data = new java.util.ArrayList<datalist>();
public Adapter(Activity ac, int list, ArrayList<datalist> data) {
super(ac, list, data);
this.ac = ac;
this.list = list;
this.data = data;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
View row = convertView;
if (row == null) {
row = this.ac.getLayoutInflater().inflate(this.list, null);
holder = new Holderin();
//
holder.name = (TextView) row.findViewById(R.id.name);
filesize = (TextView) row.findViewById(R.id.filesize);
ax = (ImageView) row.findViewById(R.id.ax_chand);
holder.khat = (ImageView) row.findViewById(R.id.item_khatog);
downloadingr = (ProgressBar) row.findViewById(R.id.downloading);
//
//
// Typeface
// face=Typeface.createFromAsset(getResources().getAs sets(),"yekan.ttf");
// holder.title.setTypeface(face);
//
//
row.setTag(holder);
} else
holder = (Holderin) row.getTag();
//
if (position % 2 == 0) {
holder.khat.setImageResource(R.drawable.khat_sbzpr );
}
holder.name.setText(this.data.get(position).name);
//
//
//
//
//
//
final String path = Environment.getDataDirectory().toString()
+ "/temp/" + data.get(position).ax;
final File file = new File(path);
if (!file.exists()) {
ax.setImageResource(R.drawable.download);
}
if (com.example.datadialog.Function.isOnline(getActiv ity())) {
ax.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (!file.exists()) {
running = !running;
if (running) {
String Link = data.get(position).text;
Toast.makeText(getActivity(), Link, 1000)
.show();
new Download(downloadingr, ax, position)
.execute(data.get(position).text);
ax.setImageResource(R.drawable.pause);
}
} else {
// true
Toast.makeText(getActivity(), "وجود دارد", 1000)
.show();
}
}
});
} else {
Toast.makeText(
getActivity(),
"دستگاه امکان استفاده از اینتزنت را ندارد تنظیمات را چک نمایید",
1000).show();
}
//
//
row.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// custom dialog
Toast.makeText(getActivity(),
position+"",
1000).show();
}
});
return row;
}
}
اینم async task من
// // async task
//
//
private class Download extends AsyncTask<String, Integer, Integer> {
private String path;
private String link;
private String fileName;
private final int BUFFER = 2048;
private final int ERROR = 0;
private final int SUCCESS = 1;
private final int CANCEL = 2;
private final int STORAGE_ERROR = 3;
ProgressBar downloading;
public Download(ProgressBar downloading, ImageView ax, int position) {
// TODO Auto-generated constructor stub
this.downloading = downloading;
}
@Override
protected void onPreExecute() {
//
try {
this.path = Environment.getExternalStorageDirectory()
.toString() + "/temp/";
} catch (Exception e) {
this.path = Environment.getDataDirectory().toString()
+ "/temp/";
}
File makeDir = new File(this.path);
if (!makeDir.exists())
makeDir.mkdir();
//
// this.ax.setImageResource(R.drawable.pause);
super.onPreExecute();
}
@Override
protected Integer doInBackground(String... params) {
this.link = params[0];
File cache = new File(this.path + "temp");
try {
HttpURLConnection connection = (HttpURLConnection) new URL(
this.link).openConnection();
if (cache.exists()) {
connection.setAllowUserInteraction(true);
connection.setRequestProperty("Range",
"bytes=" + cache.length() + "-");
}
connection.setConnectTimeout(15000);
connection.setReadTimeout(0);
connection.connect();
// دریافت ام فایل در صورت لینک غیر مستقیم
String raw = connection.getHeaderField("Content-Disposition");
// ras = attachment; filename=test.zip
if (raw != null && raw.indexOf("=") != -1) {
String[] fileNames = raw.split("=");
this.fileName = fileNames[1];
} else {
// دریافت نام فایل در صورت لینک مستقیم
this.fileName = this.link.substring(
this.link.lastIndexOf("/") + 1, this.link.length());
}
// حجم فایل
long downloadedSize = 0;
String connectionField = connection
.getHeaderField("content-range");
if (connectionField != null) {
String[] connectionRanges = connectionField.substring(
"bytes=".length()).split("-");
downloadedSize = Long.valueOf(connectionRanges[0]);
}
if (connectionField == null && cache.exists())
cache.delete();
long fileLenght = connection.getContentLength()
+ downloadedSize;
if (com.example.datadialog.Function
.getStorageFreeSize(this.path) < fileLenght) {
connection.disconnect();
return STORAGE_ERROR;
}
this.setMax((int) fileLenght);
// خواندن و دانلود فایل
InputStream input = new BufferedInputStream(
connection.getInputStream());
RandomAccessFile output = new RandomAccessFile(cache, "rw");
output.seek(downloadedSize);
byte data[] = new byte[this.BUFFER];
int count;
while ((count = input.read(data, 0, this.BUFFER)) != -1
&& running) {
output.write(data, 0, count);
downloadedSize += count;
publishProgress((int) downloadedSize);
}
// مرحله پایانی و بستن بافرها
output.close();
input.close();
connection.disconnect();
if (running)
return this.SUCCESS;
return this.CANCEL;
} catch (Exception e) {
e.printStackTrace();
return this.ERROR;
}
}
@Override
protected void onPostExecute(Integer result) {
if (result == this.SUCCESS) {
running = false;
Toast.makeText(getActivity(), "success", 1000).show();
File oldFile = new File(this.path + "temp");
File newFile = new File(this.path + this.fileName);
oldFile.renameTo(newFile);
downloadingr.setProgress(0);
} else if (result == this.CANCEL) {
Toast.makeText(getActivity(), "توقف", 1000).show();
running = false;
} else if (result == this.STORAGE_ERROR) {
Toast.makeText(getActivity(), "حافظه کم است", 1000).show();
running = false;
} else {
Toast.makeText(getActivity(), "خطا در سیستم", 1000).show();
running = false;
}
// this.ax.setImageResource(R.drawable.download);
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Integer... values) {
downloading.setProgress(values[0]);
ad.notifyDataSetChanged();
super.onProgressUpdate(values);
}
private void setMax(int value) {
downloading.setMax(value);
}
}
//
//
//
//
tresa022
یک شنبه 13 مهر 1393, 00:13 صبح
کسی نیست کمک کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
tresa022
دوشنبه 14 مهر 1393, 10:02 صبح
خداییش کسی جوا نمیده؟
چرا سوالای منو کسی جواب نمیده؟؟؟؟؟؟؟؟؟؟
storm_saeed
دوشنبه 14 مهر 1393, 18:47 عصر
مشکلتون الان اینه که اگه مثلا به ترتیب رویه دکمه اول و دوم کلیک کنید اولی دانلود میشه دومی چیزی ازش نشون نمیده ؟
اگه این باشه من قبلا ها یه همچین مشکلی داشتم اونم به خاطر این بود که asynctask صف درست میکنه در واقع به طور موازی کار رو انجام نمیداد همزمان که به جای execute از (THREAD_POOL_EXECUTOR)executeOnExecutor استفاده کردم
tresa022
سه شنبه 15 مهر 1393, 03:20 صبح
نه دوست عزیز من منظورم اینه که نمیتونم به اون پروگرسباری که مربوط به همون لیست ایتم هست دسترسی داشته باشم تو عکسی که بالا گذاشتم ببینید چطور هر آیتم پرورگسبار خودشو داره و هرکودم داره کار خودشو میکنه
نمیدونم منظورمو دست رسوندم؟؟
MSHService
سه شنبه 15 مهر 1393, 08:09 صبح
درود دوست عزیز
منم مشکلی مثله شما داشتم ، اما با یه عکس با شکله علامته + ، کاربر وقتی روی + در لیست ویو میزد میاست یه کاری انجام بشه.
این عکسع توی یه LinearLayout گذاشته بودم.
ابتدا برای عکسم بیه تگ تعریف کردم
<ImageView
android:id="@+id/imageViewTAG"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_action_new"
android:tag="-1" />
بعد توی GetView اومدم
llOrderPlus = (LinearLayout) convertView.findViewById(R.id.llOrderPlus);
llOrderPlus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ImageView imageTAG =(ImageView) v.findViewById(R.id.imageViewTAG);
positionGlobalAdapter= Integer.valueOf(imageTAG.getTag().toString());
}
});
اینطوری به اون سط دسترسی پیدا کردم.
حالا برای آپدیت کردن، من به جای شما باشم از یه هندلر استفاده میکنم.
نمیدونم منظور شما همین بود یا نه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.