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

سوال در مورد دانلود عکس

علی  10 سال پیش  10 سال پیش
0 0

با سلام : 

طبق آموزش های استاد در مورد دانلودر و دانلود عکس من یک ویو پیجر دارم 

یه صفحه splash Screen دارم که می خوام وقتی تمام عکس ها دریافت شد لودینگ به اتمام برسه و بره صفحه ی بعدی و عکس های دانلود شده رو نشون بده . 

مشکل من اینه نمی دونم از کجای این تیکه کد استفاده کنم برای صفحه Splash Screen

لطفا راهنمایی کنید.

 public class DownloadManager {

    public static ArrayList<String>          urls = new ArrayList<String>();

    public static OnDownloadCompleteListener downloadCompleteListener;


    public static void copyFile(String sourceFile, String destinationFile) {
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;
        try {
            inputStream = new FileInputStream(sourceFile);
            outputStream = new FileOutputStream(destinationFile);

            byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
            int len;
            while ((len = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, len);
            }
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (outputStream != null) {
                try {
                    outputStream.flush();
                    outputStream.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    public static void initialize() {
        downloadCompleteListener = new OnDownloadCompleteListener() {

            @Override
            public void onDownloadComplete(String url, String localPath) {
                Log.i("LOG", "Image Download Complete, Original URL: " + url + ", Save Path: " + localPath);
                copyFile(localPath, localPath.replace("/temp/", "/final/"));
                new File(localPath).delete();

            }
        };
    }


    public static void addToDownloadList(String url) {
        if (urls.contains(url)) {
            return;
        }

        String filename = url.replace("/thumbnail/", "");
        filename = filename.replace("/image/", "");
        if (new File(G.DIR_FINAL + "/" + filename).exists()) {
            return;
        }

        urls.add(url);

        FileDownloader.download("http://192.168.1.1/android/note_server/" + url, G.DIR_TEMP + "/" + filename, downloadCompleteListener);
    }
}
+1 0
شما آموزش ماژول وب سرویس رو ببین ، اونجا لیسنر تعریف کردن رو یاد میگیری ، یک لیسنر برای زمان اتمام دانلود تعریف کن و داخل اون کد اجرای اکتیویتی جدید رو بنویس. (10 سال پیش)
+2 0
آخ ببخشید در همین کد شما لیسنر دارید ، داخل متد onDownloadComplete کد باز کردن اکتیویتی جدید رو بنویس (10 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Hajhosseini  10 سال پیش
+4 0

اگر درست فهمیده باشم شما یک لیست از عکس ها داری که میخوای دانلود بشن، وقتی همه لیست دانلود شد یک عملیاتی انجام بدی.
خوب برای دانلود نیازی نیست از این دانلودر استفاده کنی، همیشه نباید همه چیز رو خودتون بنویسید.
پیشنهاد میکنم از کتابخانه picasso استفاده کنی.
آموزش:
کد زیر رو به Gradle اضافه کن:

 compile 'com.squareup.picasso:picasso:2.5.2'

حالا توی اسپلش یک حلقه قرار بده و دونه دونه عکس هارو دانلود کن، مانند کد زیر:

Picasso.with(context).load(pictures.get(i).url).into(image, new Callback() {
                        @Override
                        public void onSuccess() {
                           
                        }

                        @Override
                        public void onError() {

                        }
                    });

خوب نکته اینجاست که شما نمیخوای با دانلود اولین عکس عملیات انجام بشه، پس وقتی هر عکس دانلود میشه باید یک متد رو کال کنی، توی این متد میتونی یک متغیر public (لزومی نداره static باشه)  باید اضافه شه، پس در ابتدا باید یک متغیر بسازی، توی onSuccess اون متغیر رو اضافه کنی، توی اون متد که گفتم چک کنی آیا متغیرت برابر تا تعداد عکس ها شده یا خیر. اگر به آخرین عکس هم دانلود شده بود، به صفحه بعد برو در غیر این صورت هیچ کاری نکن.
در صورتی که نمیخوای از picasso استفاده کنی میتونی بهتر بنویسیش ولی یکم زمان بره، همین دانلودر خودت رو چوری بنویس، که اگر یک آرایه از فایل هایی که قراره دانلود بشن در پارامتر ورودی بگیره، یک لیستنر داشته باشه که در صورت اتمام هر آیتم کال بشه و یک لیستنر داشته باشه که بعد از اتمام دانلود کل آرایه کال بشه، کار سختی نیست ولی بستگی به زمانی داره که میخواید این کار رو انجام بدید.
موفق باشید 

+1 0
ممنون حاج حسینی عزیز که وقت گذاشتی راهنمایی کردی . حتما این فرایند رو تست می کنم. (10 سال پیش)

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