3 ضمیمه
مشکل در ذخیره و فراخوانی عکس در sqlite
سلام
(من این مورد رو در سایت جستجو کردم و به نتیجه نرسیدم)
من در SQLite یک جدول ساختم و می خوام اطلاعات دو ستون (کشور و عکس پرچم) اون رو فراخوانی کنم و در فرگمنتم نمایش بدم
ستون کشور رو می تونم نمایش بدم .
ولی درمورد عکس پرچم :
اولا این ستونم در دیتابیس خالیه و نمیدونم باید چطوری مقدار بدم؟
دوما برفرض پرکردن این ستون توی دیتابیس نمیدونم چطوری باید فراخوانی کنم و در فرگمنتم نمایش بدم؟
عکس کدهای کلاس فرگمنت و کلاس آداپتر و کلاس (getter(),stter()1) رو گذاشتم راهنمایی کنید ممنون میشم
این کلاس فرگمنت:
ضمیمه 143848
کلاس آداپتر و فراخوانی متد getCountry_Name() و ست کردن آن در یک تکست ویو برای نمایش در فرگمنت:
ضمیمه 143849
کلاس Structure:
ضمیمه 143850
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
با سلام.
شما میتونی اسم فایل رو در دیتابیس ذخیره کنی و فایل مربوطه رو در فولدر assets قرار بدی.
بعداز اون میتونی در آداپتر یک imagview تعریف و عکس پرچم رو از دیتابیس گرفته و نمایش بدی.
//loadDatabase
Structure country = new Structure();
country.setname = ...;
country.setflag = ...;
//adapter
holder.txtName.settext(name);
holder.imgFlag.setImageBitmap(image);
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
نقل قول:
نوشته شده توسط
raha.scientific
سلام
(من این مورد رو در سایت جستجو کردم و به نتیجه نرسیدم)
من در SQLite یک جدول ساختم و می خوام اطلاعات دو ستون (کشور و عکس پرچم) اون رو فراخوانی کنم و در فرگمنتم نمایش بدم
ستون کشور رو می تونم نمایش بدم .
ولی درمورد عکس پرچم :
اولا این ستونم در دیتابیس خالیه و نمیدونم باید چطوری مقدار بدم؟
دوما برفرض پرکردن این ستون توی دیتابیس نمیدونم چطوری باید فراخوانی کنم و در فرگمنتم نمایش بدم؟
عکس کدهای کلاس فرگمنت و کلاس آداپتر و کلاس (getter(),stter()1) رو گذاشتم راهنمایی کنید ممنون میش
سلام :-)
شاید این لینک کمک تون کنه :
http://stackoverflow.com/questions/1...ase-in-android
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
خیلی ممنون
من بر اساس راهنمایی شما فایل عکسم رو (iran.png) در assets کپی کردم و همین اسم رو بدون پسوند در splite در ستون Flag نوشتم(برای کشور ایران)
در کلاس آداپترم یک imageview و یک Bitmap تعریف کردم:
ImageView img_flags;
Bitmap bmp;
holder.img_flags.setImageBitmap(bmp);
و در کلاس فرگمنت در متد loadDatabase:
Structure structure = new Structure();
structure.setFlag(cursor.getString(4));//چون ستون پرچم ستون چهارم دیتابیس هست
arrayList.add(structure);
ولی بازم عکس ها رو نشون نمیده موقع اجرا!
به نظرتون برای گرفتن عکس نباید مثل گرفتن متن از لیست استفاده کنم در این صورت به چه صورت؟
برای گرفتن عکس در کلاس آداپتر یک لیست تعریف کردم:
List<Structure> items = Collections.emptyList();
holder.txt_countryname.setText(items.get(position).getCountry_Name());
چی کار بکنم نشون بده عکس ها رو ممنون...
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
مشکل از اونجاست که شما باید فایل رو از assets بگیری که این نیاز به دستورالعمل خاصی داره.
تابع زیر این کار رو برات انجام میده.
public static Bitmap getBitmapFromAsset(Context paramContext, String strName)
{
AssetManager assetManager = paramContext.getAssets();
InputStream istr = null;
try {
istr = assetManager.open(strName);
}
catch (IOException e) {}
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
اون bitmap که تعریف کردی اضافه هست.
در آداپتر کافیه اسم فایل (+ فرمت) رو به این تابع بدی که خروجیش bitmap هست. بعد خروجی رو به imageview بدی.
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
نقل قول:
نوشته شده توسط
hesam67_b
مشکل از اونجاست که شما باید فایل رو از assets بگیری که این نیاز به دستورالعمل خاصی داره.
تابع زیر این کار رو برات انجام میده.
public static Bitmap getBitmapFromAsset(Context paramContext, String strName)
{
AssetManager assetManager = paramContext.getAssets();
InputStream istr = null;
try {
istr = assetManager.open(strName);
}
catch (IOException e) {}
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
اون bitmap که تعریف کردی اضافه هست.
در آداپتر کافیه اسم فایل (+ فرمت) رو به این تابع بدی که خروجیش bitmap هست. بعد خروجی رو به imageview بدی.
خیلی ممنون واقعا الان دیگه عکس ها نمایش داده میشن ...
فقط میمونه یک سوال دیگه اینم اگر لطف کنید راهنمایی کنید ممنون میشم
من چون عکس رو در دیتابیس هم گذاشتم و می خوام برای هر آیتم، پرچم مربوط به همون آیتم نمایش داده بشه می خوام از متد ()getFlag که (در کلاس Structure ) عکس ها
رو از دیتابیس برمی گردونه استفاده کنم:
بنابراین توی کلاس آداپترم در متد onBindViewHolder این کدها رو نوشتم
List<Structure> items = Collections.emptyList();
Database database=new Database(context);
holder.img_flags.setImageBitmap(database.getBitmapFromAsset(context,items.get(position).getFlag()));
__________________________________________________ ____________________________________
و توی کلاس فرگمنتم درمتد LoadDatabase():
متد setFlag() رو فراخوانی کردم
Cursor cursor=database.QueryData("SELECT * FROM Country WHERE Ghareh='آفریقا'");
if (cursor!=null && cursor.moveToFirst())
{
do {
Structure structure = new Structure();
structure.setCountry_Name(cursor.getString(1));
structure.setFlag(cursor.getString(4));
arrayList.add(structure);
}
while (cursor.moveToNext());
}
ولی فورس کلوز میده
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
در واقع اگر فقط از assets فراخوانی کنم همون عکس رو برای تمام کشور ها نشون میده و عکس رو از دیتابیس نمیگیره
یعنی من اگر این متد رو در فرگمنتم کامنت کنم بازم عکس ها رو نشون میده
//structure.setFlag(cursor.getString(4));
getFlag() استفاده شده ولی جایی از متدsetFlag() چون از متد
استفاده نشده تا از دیتابیس فیلد رو برگردونه
(getter , setter متدهای کلاس)
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
من منظور شما رو متوجه نشدم. نیازی به ذخیره سازی عکس در دیتابیس نیست و پرچم ها رو در فولدر assets قرار بدید و فقط نام رو در دیتابیس ذخیره کنید و با اون تابعی که گفتم، عکس ها رو ست کنید.
1 ضمیمه
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
نقل قول:
نوشته شده توسط
hesam67_b
من منظور شما رو متوجه نشدم. نیازی به ذخیره سازی عکس در دیتابیس نیست و پرچم ها رو در فولدر assets قرار بدید و فقط نام رو در دیتابیس ذخیره کنید و با اون تابعی که گفتم، عکس ها رو ست کنید.
بله منم همین کار رو انجام دادم
یک عکس ضمیمه کردم دقیقا مراحلی که شما گفتید رو انجام دادم
ضمیمه 143877
با این کدها توی همه ایمیج ویو ها یک پرچم رو نشون میده
( از کاردویو استفاده کردم که یک imageview و یک textview داره (پرچم و نام کشور) )
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
ظاهرا برخی از کشورها پرچم نداره. شما باید یک عکس پیشفرض داشته باشی و در آداپتر چک کنی اگر کشور موردنظر پرچم داشت که پرچم رو ست میکنی وگرنه عکس پیشفرض رو ست کن.
if else قرار بده.
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
سلام خیلی ممنون از توضیحتون
کدها رو به این صورت تغییر دادم: public void onBindViewHolder(ViewHolder holder, int position) {
Database database=new Database(context);
//from database
holder.txt_countryname.setText(items.get(position) .getCountry_Name());
int resID = context.getResources().getIdentifier(items.get(pos ition).getFlag(), "mipmap", context.getPackageName());
if((items.get(position).getFlag().equals("0"))
{
try {
holder.img_flags.setImageBitmap(database.getBitmap FromAssets("iran.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
else {
holder.img_flags.setImageResource(resID);
}
این بار عکس ها رو در mipmap قرار دادم
به ازای پرچم هایی که صفر هستند یک عکس پیش فرض ست کردم(فعلا پرچم ایران رو) ؛{ البته متدش رو هم کمی تغییر دادم که context نداشته باشه}
و پرچم هایی که خالی نیستند رو هم با متد getFlag() پر می کنم
ولی وقتی دیباگ می کنم position یکی یکی میره بالا(0,1,2,3,4,...)
ولی resID همیشه صفره
مشکل از اینه؟
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
شما وقتی میخوای یک فایل رو از طریق context.getResources().getIdentifier
دریافت کنی، باید فایل رو بدون پسوند بدی.
int resID = context.getResources().getIdentifier(items.get(pos ition).getFlag().replace(".png", ""), "mipmap", context.getPackageName());
نقل قول: مشکل در ذخیره و فراخوانی عکس در sqlite
نقل قول:
نوشته شده توسط
hesam67_b
شما وقتی میخوای یک فایل رو از طریق
context.getResources().getIdentifier
دریافت کنی، باید فایل رو بدون پسوند بدی.
int resID = context.getResources().getIdentifier(items.get(pos ition).getFlag().replace(".png", ""), "mipmap", context.getPackageName());
این جوری هم امتحان کردم نشد،
در آخر هم اسم ها رو بدون پسوند وارد کردم (پسوند ها رو حذف کردم از فیلد Flag) و کدهای زیر رو نوشتم که بازم نشد:
int resID = context.getResources().getIdentifier(items.get(pos ition).getFlag(), "mipmap", context.getPackageName());
if((items.get(position).getFlag().equals("0"))
{
try {
holder.img_flags.setImageBitmap(database.getBitmap FromAssets("iran.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
else {
holder.img_flags.setImageResource(resID);درهر حال ممنون از راهنماییتون.