نحوه ایجاد گالری تصویر؟
سلام
میخوام یه گالری تصویر بسازم که تصاویرش رو از سرور میگیره حالا کلی سوال برام پیش اومده که چندتاش اینان:
- برای ساخت گالری تصویری که ۳ ردیف داره بهتره از listview استفاده کنم یا gridview؟ اگر gridview بهتره بی زحمت نحوه استفاده از gridview رو توضیح بدید یا یه آموزش معرفی کنید
- برای ساخت گالری تصویر، حتما باید تصاویر در گوشی کاربر دانلود شن؟ یا روش دیگه ای هم هست؟
- در آموزش لیست ویو و تصاویر پرحجم آنلاین استاد در برنامه نویسی سمت سرور یه حلقه for ایجاد کرد و تعداد دفعات تکراره اون رو برابر با تعداد تصاویر قرار داد، حالا می خوام بدونم که روشی هست که خود برنامه بفهمه تعداد تصاویر چندتا هست و حلقه رو به تعداد تصاویر تکرار کنه؟
بچه ها هر کدوم از سوالا رو بلد بودید بی زحمت توضیح بدید. نیازی نیست که حتما کامل باشه، هرچی بلد بودید بگید. یه سرنخ کوچیک هم دستم بیاد بسته. ممنون
1- به نظر من gridview . آموزش خاصی نداره. مثل همون لیست ویو یه آداپتر براش میسازی و به گرید ویو معرفیش میکنی . همون اداپتر استادم توش جواب میده. چند وقت پیشم یکی از دوستان یه آموزشی در این باره گذاشته بودآموزش : استفاده از GridVeiw شخصی سازی شده
2- تا اونجایی که من میدونم چون میخوای توی یه کنترل ازش استفاده کنی (مثل gridview) آره حتما باید دانلود شن. ولی راه بهینه تر اینه که فقط یه thumbnail ازشون دانلود کنی و توی gridview نشون بدی بعد اگه کاربر کلیک کرد اصلش دانلود بشه
3- من خیلی php کار نکردم ولی مطمئنا راهی هست که بتونه تعداد فایل های یه دایرکتوری رو رو سرور حساب کنه .
سلام
با تشکر از پاسخ sadeghbarout
در رابطه با سوال 3 :
شما وقتی که نام و مسیر عکس ها رو به صورت JSON Array میفرستید به سمت client پس client هم میتونه توی این آرایه iterate کنه پس یعنی مشا میتونید برای شرط حلقه for بذارید تا زمانی که مثلا ()i < jsonArrayName.length پس از این به بعد هر چند تا عکس در سمت سرور داشته باشید از سمت client نگرانی ندارید، چون دارید یه آرایه به سمت client میفرستید و client فقط توش iterate میکنه.
اینم کد واسه مثال:
String result = WebService.readUrl("http://192.168.1.6/file-server/service.php", null);
if (result != null) {
try {
G.images.clear();
JSONArray tasks = new JSONArray(result);
for (int i = 0; i < tasks.length(); i++) {/*********/
JSONObject object = tasks.getJSONObject(i);
StructureImage image = new StructureImage();
image.title = object.getString("title");
image.url = object.getString("url");
image.tumbnail = object.getString("tumbnail");
G.images.add(image);
}
adapter.notifyDataSetChanged();
}
catch (JSONException e) {
e.printStackTrace();
}
}
silencewolf ممنون که جواب دادی.
پاسخ شما کاملا صحیح هست ولی من می خوام سمت سرور بفهمم که چندتا تصویر در دایرکتوری هست. در مثال استاد حدودا 15تا تصویر در پوشه images بود و چون بتونه آدرس این تصاویر را به client ارسال کنه، یه حلقه ایجاد کرد که 15 مرتبه تکرار می شد. حالا این روش برا وقتی که بخوای هر چند وقت به تعداد تصاویرت اضافه کنی اصلا خوب نیست چون هر دفعه باید به صورت دستی کدهای php رو تغییر بدی. حالا میخوام کاری کنم که خود php بفهمه چندتا تصویر در دایرکتوری وجود داره و حلقه for رو به تعداد تصاویر تکرار کنه.
کدهای استاد به این شکل بود:
<?php
$images = array();
for($i=1 ; $i <=15 ; $i++){
$image = array();
$image["title"] = "image" . $i;
$image["src"] = "Thumbnails/image-". $i .".jpg";
$images[] = $image;
}
echo json_encode($images);
این کد رو تست کن.
<?php
$count = 0;
$dir = 'images/';
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false){
if (!in_array($file, array('.', '..')) && !is_dir($dir.$file))
$count++;
}
}
// echo "Files= ".$count;
$images = array();
for($i=1 ; $count ; $i++){
$image = array();
$image["title"] = "image" . $i;
$image["src"] = "Thumbnails/image-". $i .".jpg";
$images[] = $image;
}
echo json_encode($images);
?>
کد بدست آوردن تعداد فایل ها در یک دایرکتوری سمت سرور:
<?php
$count;
$dir = 'Thumbnails/';
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false){
if (!in_array($file, array('.', '..')) && !is_dir($dir.$file))
$count++;
}
}
$images = array();
for($i=1 ; $i <= $count ; $i++){
$image = array();
$image["title"] = "image" . $i;
$image["src"] = "Thumbnails/image-". $i .".jpg";
$images[] = $image;
}
echo "<pre>";
print_r($images);
echo "</pre>";
echo json_encode($images);
با عرض پوزش به خاطر جواب اشتباهی که دادم، اینم یه جواب بهینه و کارا برای خواندن اطلاعات (سمت سرور + php)
$dir = 'images/'; $files = scandir($dir);
echo count($files);/*اگه بخواید که فقط تعداد فایل ها رو بدست بیارید فقط تا همینجا کافیه */
/* ادامه کد برای این هست کد فقط فایل های مورد نیازمون رو از توی دایرکتوری بگیریم */
$count = 0;
$image_files = array(); for($i=0; $i<count($files);$i++){ $path_parts = pathinfo($dir . $files[$i]); if($path_parts['extension'] == "jpg"){ $image_files[] = $files[$i];
$count++; } }
echo $count; /*این خط تعداد فایل هایی که فرمت عکس دارن رو نشون میده */
print_r($image_files);/*این خط فقط جهت تست کردنه و فراموش نکنید که باید حذفش کنید :)*/ echo json_encode($image_files);
یه توضیح مختصر درباره کد:
$dir : توی این متغیر آدرس یه دایرکتوری رو میریزیم
scandir() : این دستور یه آرایه از تمام عناصر توی دایرکتوری برمیگردونه
count() : تعداد عناصر آرایه رو بر میگردونه
pathinfo() : اطلاعاتی درباره دایرکتوری به ما میده
['extension'] : اینم که از اسمش معلومه، فرمت فایل رو بهمون میده
if : $image_files اینجا یه شرط میذاریم که فقط اونایی که عکس هستن ریخته بشن توی
این اولین باریه که کد php نوشتم،اگه جایی مشکل داشت ببخشید دیگه :)، البته این کد تست شده و جواب میده :)
موفق باشید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .