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

دیالوگ سفارشی (( کمکم کنید دوستان ))

ba2ever  8 سال پیش  6 سال پیش
+1 0

دوستان سلام من چطوری می تونم توو پروژه ی مارکت وقتی روو دکمه ی نصب کلیک می کنم میزان دانلود رو مثل عکس زیر  نشون بده؟


0 0
آموزش استاد در رابطه با ساخت پروگرس بار سفارشی را مطالعه کنید. (8 سال پیش)
0 0
مرسی .. راسش من ی دیالوگ اختصاصی برا خودم درس کردم اما نمی دونم که توو این پروژه ی استاد چطوری این متد ها رو به هم پاس بدم تا وقتی روو دکمه ی دانلود کلیک میکنم اول این صفحه ی دیالوگ نشون داده ش . اگه میشه کمک کنید محمد حسین جان .. (8 سال پیش)
0 0
برای dialog یه متد بنویسید که درصد دانلود رو بگیره و توش متد progressbar رو صدا کنه . (8 سال پیش)
 برای این سوال 8 پاسخ وجود دارد.
پاسخ به سوال 
ba2ever  8 سال پیش
0 0

من این کدو نوشتم  و به متدی که برای دانلود بود توو پروژه ی استاد پاس دادم  اما بازم بالا نیومد .. نمیدونم که مشکل از کجاست... 

 public static void DownloadProgressMuisc() {
        final Dialog dialog = new Dialog(G.currentActivity);
        dialog.setContentView(R.layout.pr);
        Button btnStop = (Button) dialog.findViewById(R.id.btnStop);
        final TextView txtPercent = (TextView) dialog.findViewById(R.id.txtPercent);
        TextView totalSize = (TextView) dialog.findViewById(R.id.totalSize);
        final ProgressBar prgDownload = (ProgressBar) dialog.findViewById(R.id.prgDownload);

        OnProgressDownloadListener listener = new OnProgressDownloadListener() {

            private String convertByteToMB(int byteLength) {
                float sizeInKB = (float) byteLength / 1024;
                float sizeInMB = (float) sizeInKB / 1024;

                return String.format("%.1fMB", sizeInMB);
            }


            @Override
            public void onProgressDownload(int percent, int downloadedSize, int fileSize) {
                prgDownload.setProgress(percent);

                String totalSize = convertByteToMB(downloadedSize) + "/" + convertByteToMB(fileSize);
                txtPercent.setText(percent + "% " + totalSize);

                if (percent >= 100) {
                    txtPercent.setText("Download Complete");
                }
            }

        };

0 0
دوستان اگه میشه کمک کنید (8 سال پیش)
0 0
listener که ساختید رو کجا صدا زدید ؟ کجا استفاده کردید ؟ این listener زمانی کار میکنه < که دانلودی د حال اجرا باشه (8 سال پیش)
پاسخ به سوال 
Hajhosseini  8 سال پیش
+2 0

مسعود جان مراحل به این صورته:
1: دانلودر رو مینویسی
2: توی دانلودر وقتی دانلود انجام میشه توسط UI Thread به دیالوگت دسترسی پیدا میکنی و ProgressBar رو آپدیت میکنی.
برای انجام این کار باید یک لیستنر برای دانلود بنویسی. بهتره آموزش های استاد(ساخت لیستنر، دیالوگ، دانلودر) رو دوباره ببینی. اگر اینارو دیدی و نتونستی درستش کنی کد هاتو قرار بده حتما کمکت میکنم. من 1-2 روزی درگیرم ولی بعدش هر کمکی از دستم بر بیاد انجام میدم.

+1 0
خیلی آقایی بخدا . حالا من تمام سعیمو میکنم که خودم درستش کنم اگه نشد مزاحمت میشم ♥ مرسی (8 سال پیش)
پاسخ به سوال 
ba2ever  8 سال پیش
0 0

راسش برنامه ی از نطر کد نویسی خیلی شبیه پروژهی مارکت استاد هست . برای این که بتونم ی dialog  سفارشی داشته باشم  تا بم میزان دانلود رو مطابق عکس بالا نشونم بده یک سری کد هایی اضافه کردم به پروژم که داستانش ازین قراره :

1) من اومدم توو پروژم ی کلاس به اسم OnProgressDownloadListener درست کردم که توش این محتوا موجد هست:

 public class OnProgressDownloadListener {

    public void onProgressDownload(int percent, int finalDownloadedSize, int totalSize) {
        
    }

بعدش :
2) توو کلاس DownloadRequest  اومدم  این کارو کردم :

 public class DownloadRequest {

    private int downloadedSize;
    private int totalSize;
    private int percent;


    public int getDownloadedSize() {
        return downloadedSize;
    }


    public int getTotalSize() {
        return totalSize;
    }


    public int getPercent() {
        return percent;
    }


    public DownloadRequest download() {
        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    URL url = new URL(downloadPath);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setDoOutput(true);
                    connection.connect();

                    totalSize = connection.getContentLength();

                    File file = new File(filepath);
                    if (file.exists()) {
                        file.delete();
                    }

                    FileOutputStream outputStream = new FileOutputStream(filepath);

                    InputStream inputStream = connection.getInputStream();
                    byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
                    int len = 0;
                    while ((len = inputStream.read(buffer)) > 0) {
                        outputStream.write(buffer, 0, len);
                        downloadedSize += len;

                        percent = (int) (100.0f * (float) downloadedSize / totalSize);
                        if (percent == 100 && listener != null) {

                            final int finalDownloadedSize = downloadedSize;
                            G.HANDLER.post(new Runnable() {

                                @Override
                                public void run() {
                                    listener.onDownloadComplete(downloadPath, filepath);
                                    progressListener.onProgressDownload(percent, finalDownloadedSize, totalSize);  <<=============>>  اینو اضافه کردم
} }); } if (simulate) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } outputStream.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); thread.start(); return this; } private String downloadPath; private String filepath; private OnDownloadCompleteListener listener; private OnProgressDownloadListener progressListener; <<=================================>> اینو اضافه کردم private boolean simulate; public DownloadRequest downloadPath(String value) { downloadPath = value; return this; } public DownloadRequest filepath(String value) { filepath = value; return this; } public DownloadRequest listener(OnDownloadCompleteListener value) { listener = value; return this; } public DownloadRequest progressListener(OnProgressDownloadListener value) { <<=================================>> اینو اضافه کردم
progressListener = value; return this; } public DownloadRequest simulate(boolean value) { simulate = value; return this; } }

بعدش :
3) برای تمیز تر شدن کار و شلوغ نشدن پروژه اومدم ی کلاس به اسم Dialogs درست کردم که هر دیالوگی که دارم رو این کلاس فرا خونی کنم . و برای همین منظور من ی دیالوگ سفارشی به اسم ((pr.xml ))  ساختم که قیافش میشه اون عکس بالایی .(( ظاهرش بعدا عوض میشه  خخخخ))  .  که این دیالوگ کدش ازین قراره :

 
    static void ProgressDownloader() {
        final Dialog dialog = new Dialog(G.currentActivity);
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.pr);

        final ProgressBar prgDownload = (ProgressBar) dialog.findViewById(R.id.prgDownload);
        Button btnStop = (Button) dialog.findViewById(R.id.btnStop);
        final TextView txtDownload = (TextView) dialog.findViewById(R.id.txtDownload);

        btnStop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                dialog.dismiss();
            }
        });
        OnProgressDownloadListener listener = new OnProgressDownloadListener() {

            private String convertByteToMB(int byteLength) {
                float sizeInKB = (float) byteLength / 1024;
                float sizeInMB = (float) sizeInKB / 1024;

                return String.format("%.1fMB", sizeInMB);
            }


            @Override
            public void onProgressDownload(int percent, int downloadedSize, int fileSize) {
                prgDownload.setProgress(percent);
                txtDownload.setText(percent + "% " + convertByteToMB(downloadedSize) + "/" + convertByteToMB(fileSize));

                if (percent >= 100) {
                    txtDownload.setText("Download Complete");
                }
            }
        };

        dialog.show();

    }

و مرحله ی آخر :
4)  من بعد ازین که ای دیالوگ رو ساختم اومدم در متدی که استاد نوشت برای دانلود اپلیکیش ((apk ))   اونجا اومدم این متد رو صدا زدم که وقتی فایل مورد نطر داره دانلود میشه بم این دیالوگ رو نشون بده اما  این اتفاق نمیفته .. اینم متد  دانلود و پاس دادن دیالوگ به اون ..

  public static void DownloadMusic() {
        final String filename = HelperString.getFileName(G.selectedMusic.file);

        DownloadRequest downloadRequest = new DownloadRequest()
                .downloadPath("http://169.254.72.1/Folkolor/" + G.selectedMusic.file)
                .filepath(G.DIR_MUSIC + "/" + filename)
                .listener(new OnDownloadCompleteListener() {

                    @Override
                    public void onDownloadComplete(String url, String localPath) {
                        File file = new File(localPath);
                        new File(G.DIR_MUSIC + "/" + filename).exists();

                        Dialogs.ProgressDownloader();   <<============================>>  اینو اضافه کردم 

                    }

                })
                .download();

    }

اگه میشه کمک کنید تا مشکلم حل بشه . مرسی

0 0
شما لیستنری که ساختید رو باید همراه با لینک به این متد پاس بدید > download (8 سال پیش)
پاسخ به سوال 
Hajhosseini  8 سال پیش
+1 0

 progressListener.onProgressDownload(percent, finalDownloadedSize, totalSize);

این باید بره بالای if ، چون شما میخوای با هر تغییر مقدار رو ارسال کنی نه وقتی 100% شد

 

اینا رو درست کنید اگر مشکل حل نشد دوباره بررسی میکنم. شرمنده من این چند روزه خیلی درگیرم ممکنه یکم دیر به دیر جواب بدم. 

0 0
امتحان کردم اما اررور داد ... :| والا نمیدونم چیکار کنم :( (8 سال پیش)
0 0
لطفا کمکم کنید... (8 سال پیش)
پاسخ به سوال 
کاشی زاده  8 سال پیش
+2 0

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

1- یک کلاس بسازید که extends Dialog باشه و کد ها و کاسنترامتور هاش رو بنویسید و  فراخونی کنید .

2- لایه ایجاد شده برای dialog که توش progressbar هست رو به دایلوگتون ست کنید .

3-همه ایتم های مورد نیاز از جمله progressbar رو توی کلاس dialog معرفی کنید .

4- یه متد مینویسید که مقدار درصد دانلود رو در پروگرس بار ست کنه.

5-توجه داشته باشید برای تغییر ui  نیاز به هندلر دارید.

0 0
دوستان من هر کاری کردم نشد که نشد .. اگه میشه کمک کنید خواهشا کمکم کنید . بی سوادی بد دردیه .. اه (8 سال پیش)
پاسخ به سوال 
Morteza  8 سال پیش
+1 0

سلام جناب criss زیر کدتون به صورت کامنت مشکلتون رو گفتند.

شما در متد DownloadMusic فقط listener مربوط به پایان دانلود یعنی onDownloadComplete را ست کردید و listener مربوط به OnProgressDownloadListener را ست نکردید ،در ضمن شما در listener مربوط به پایان دانلود فایل دیالوگ را صدا زدید یعنی هنگامی که دیگه دانلود تموم شده.

در متد ProgressDownloader هم اومدید listener مربوط به OnProgressDownloadListener را تعریف کردید اما اون رو هیچ جا صدا نزدید.

امیدوارم پاسخم درست باشه...

پاسخ به سوال 
ba2ever  8 سال پیش
0 0

محمد حسین جان من این کاری که شما گفتید رو انجام دادم ... اما کار نمیکنه .. 

 public class Dialoog extends Dialog {

    public Dialoog(Context context) {
        super(context);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.pr);
    }


    protected Dialoog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);

        LayoutInflater li = LayoutInflater.from(getContext());
        View view = li.inflate(R.layout.pr, null);

        Dialog dialog = new Dialog(G.currentActivity);
        final TextView txtDownload = (TextView) view.findViewById(R.id.txtDownload);
        final TextView totalSizes = (TextView) view.findViewById(R.id.totalSizes);
        final ProgressBar prgDownload = (ProgressBar) view.findViewById(R.id.prgDownload);

        OnProgressDownloadListener listener = new OnProgressDownloadListener() {

            private String convertByteToMB(int byteLength) {
                float sizeInKB = (float) byteLength / 1024;
                float sizeInMB = (float) sizeInKB / 1024;

                return String.format("%.1fMB", sizeInMB);
            }


            @Override
            public void onProgressDownload(int percent, int downloadedSize, int fileSize) {
                prgDownload.setProgress(percent);

                String totalSize = convertByteToMB(downloadedSize) + "/" + convertByteToMB(fileSize);
                txtDownload.setText(percent + "% " + totalSize);
                totalSizes.setText(fileSize);

            }

        };
        dialog.show();
    }


    public Dialoog(Context context, int theme) {
        super(context, theme);

    }

}

 


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