PDA

View Full Version : کمک برای ذخیره تصاویر دریافتی از سرور



hamedg1366
دوشنبه 07 مهر 1393, 22:55 عصر
با سلام و خسته نباشید

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

چطور در حافظه داخلی گوشی ذخیره کنم ؟ و همچنین چطور در حافظه خارجی ؟ کدوم بهتره

با چه کد دستورهائی؟

با تشکر از همتون

hamedg1366
دوشنبه 07 مهر 1393, 23:08 عصر
لطفا به نمونه کد زیر توجه کنید :

به این نحوه ذخیره چطور میشه توی کد برنامه دسترسی پیدا کرد؟

آیا میشه این نوع ذخیره رو باز کرد و دوباره بهش اضافه کرد و توی اجراهای برنامه اون رو خوند و نشون داد توی برنامه ؟



try
{
URL url = new URL("Enter the URL to be downloaded");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
File SDCardRoot = Environment.getExternalStorageDirectory().getAbsol uteFile();
String filename="downloadedFile.png";
Log.i("Local filename:",""+filename);
File file = new File(SDCardRoot,filename);
if(file.createNewFile())
{
file.createNewFile();
}
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
int totalSize = urlConnection.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 )
{
fileOutput.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
}
fileOutput.close();
if(downloadedSize==totalSize) filepath=file.getPath();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
filepath=null;
e.printStackTrace();
}
Log.i("filepath:"," "+filepath) ;
return filepath;

pbm_soy
سه شنبه 08 مهر 1393, 00:15 صبح
مشکل شما را دقیق نفهمیدم
در کد بالا هر بار فایلی با نام downloadfile.png که در متغیر filename مشخص شده در حافظه خارجی ذخیره میشود فقط باید حواستون باشد که در هر بار اجرا شاید بخواهید فایل دیگری با نام دیگری را ذخیره کنید
بله فایلهایی که به این روش ذخیره کردید قابل دسترسی هستند و به عنوان یک فایل تصویر می توانید به آنها دسترسی داشته باشید

hamedg1366
سه شنبه 08 مهر 1393, 07:47 صبح
مشکل شما را دقیق نفهمیدم
در کد بالا هر بار فایلی با نام downloadfile.png که در متغیر filename مشخص شده در حافظه خارجی ذخیره میشود فقط باید حواستون باشد که در هر بار اجرا شاید بخواهید فایل دیگری با نام دیگری را ذخیره کنید
بله فایلهایی که به این روش ذخیره کردید قابل دسترسی هستند و به عنوان یک فایل تصویر می توانید به آنها دسترسی داشته باشید


لطفا نحوه دسترسی به فایل در اجراهای بعدی رو با کد توضیح بدین ؟

و یه سوال این فایل الان کجا دقیقا ذخیره میشه ؟ (آدرسش)

rubiks.kde
سه شنبه 08 مهر 1393, 12:10 عصر
با سلام و خسته نباشید

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

چطور در حافظه داخلی گوشی ذخیره کنم ؟ و همچنین چطور در حافظه خارجی ؟ کدوم بهتره

با چه کد دستورهائی؟

با تشکر از همتون

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

universal image loader

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

pbm_soy
سه شنبه 08 مهر 1393, 23:48 عصر
لطفا نحوه دسترسی به فایل در اجراهای بعدی رو با کد توضیح بدین ؟

و یه سوال این فایل الان کجا دقیقا ذخیره میشه ؟ (آدرسش)


فایل دانلود شده قاعدتا طبق دستوری که نوشتید در ریشه حافظه خارجی کپی میشود!

و به همین ترتیب برای دسترسی می توانید از دستور زیر استفاده کنید

File SDCardRoot = Environment.getExternalStorageDirectory().getAbsol uteFile();
String filename="downloadedFile.png";
File file = new File(SDCardRoot,filename);

چون برای آدرس دهی برای گپی محتوای فایل دانلودی از این روش استفاده میکند پس برای خواندن هم همین آدرس را استفاده میکنید!

hamedg1366
سه شنبه 08 مهر 1393, 23:55 عصر
تکراری ...

hamedg1366
سه شنبه 08 مهر 1393, 23:57 عصر
بهتره از کتابخانه های اماده استفاده کنید که کار کش و دانلود رو با هم انجام میدن و مدیریت دانلود رو هم خودشون انجام میدن.کار رو بسیار راحت میکنن.

universal image loader

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



ضمن تشکر از راهنمائیتون ، من این کتابخونه + چندین کتابخونه دیگه پیدا کردم اما :افسرده:

مثلا توی این کتابخونه پیشنهادی شما ایت تیکه کد رو دقت بفرمائید :



options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.resetViewBeforeLoading(true)
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();



الان این تیکه کد یعنی چی !؟

rubiks.kde
چهارشنبه 09 مهر 1393, 20:11 عصر
این تکه کد رو به عنوان تنظیمات جهت دریافت میدن به به شی loader که مسئول دریافت هست.
اطلاعاتی مثل اینکه توی دیسک کش کنه یا نه ، تنظیمات خود عکس چطور باشه و ...