سوال در مورد دانلود عکس
با سلام :
طبق آموزش های استاد در مورد دانلودر و دانلود عکس من یک ویو پیجر دارم
یه صفحه 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);
}
}
اگر درست فهمیده باشم شما یک لیست از عکس ها داری که میخوای دانلود بشن، وقتی همه لیست دانلود شد یک عملیاتی انجام بدی.
خوب برای دانلود نیازی نیست از این دانلودر استفاده کنی، همیشه نباید همه چیز رو خودتون بنویسید.
پیشنهاد میکنم از کتابخانه 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 استفاده کنی میتونی بهتر بنویسیش ولی یکم زمان بره، همین دانلودر خودت رو چوری بنویس، که اگر یک آرایه از فایل هایی که قراره دانلود بشن در پارامتر ورودی بگیره، یک لیستنر داشته باشه که در صورت اتمام هر آیتم کال بشه و یک لیستنر داشته باشه که بعد از اتمام دانلود کل آرایه کال بشه، کار سختی نیست ولی بستگی به زمانی داره که میخواید این کار رو انجام بدید.
موفق باشید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .