رفتن به مطلب
  • 0

فراخوانی عکس از دیتابیس به imageview


jafarik

سوال

سلام

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

البته اینم بگم که عکسا رو تو دیتابیس گذاشتم

اینم عکس اون لایوت مورد نظرمه:

photo_2017_09_03_21_18_59.jpg

اینم دیتابیسمه:

asf.PNG

لینک ارسال
به اشتراک گذاری در سایت های دیگر

7 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام مجدد

من چون بهتون گفتم دقیقا مثل متن که ریختین توی لیبل به همون صورت اسم عکس رو هم بگیرین؛؛برا همین دیگه کورسور ننوشتم

java.lang.RuntimeException: Object should first be initialized (Cursor).

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

F:\project001\Objects\bin\extra\assets

نیاز به کاری که این بالا هم انجام دادین نیست.

شما الان بیاین از پروژه تون یه کپی بگیرین(هر موقع که توی مراحل ساخت به موفقیتی دست پیدا کردین حتما از سورس پروژه کپی بگیرین و مثلا به تاریخ همون روز ثبت کنین یجا بعدا شاید لازم بشه) وقتی کپی گرفتین یه نسخه شو جدا نگه دارین یه نسخه شو هم اینطور که میگم برین اگه جواب نگرفیتن برگردین سر همون پروژه ای که خودتون نوشتین و کپی گرفتین ازش

** اول یه از سالم بودن و کامل بودن اس دیکا و جی دیکا مطمعن شین(یه پروژه جدید ایجاد کنین؛؛سیو کنین؛؛بعد در حالت ریلیز کامپایل کنین اگه کامل کامپایل شد ینی حله)

** وقتی وارد پروژه میشین برا اولین بار دوتا پوشه اس یکیش آبجکت هست یکیش فایل؛؛شما داخل آبجکت کاری ندارین هر فایلی داشتین میزیزین داخل پوشه فایل که میشه همون اَسِسِت برنامه پس عکسارو فقط داخل این پوشه بریزین

** دیتا بیس رو اصلاح کنین (1-اسم دیتابیس؛اسم تیبل ها یا همون جدول ها و اسم فیلد ها به بزرگی و کوچکی کلمات حساس هستن و اگه اشتباه صورت بگیره خطایی میده که بیای متوجه بشین دوهفته طول میکشه پس بهتره همهم حروفات با حروف کوچک نوشته بشه--2-ستونی  که عکسا توش هستن رو پاک کنین فقط اسم عکسا بمونه کافیه --3--هربار که روی دیتابیس اطلاعاتی وارد کنین حجمش میره بالا و با حذف کردن اطلاعات هم حجمش کم نمیشه پس بعد پاک کردن عکسا لازمه یکاری کنین که حجم دیتابیس بیاد پایین(1-سمت چپ رو استم دیتا بیس دابل کلیک میکنین-2-روی main اول دابل کلیک میکنین و بعد کلیک راست میکنین و روی گزینه maintain وای میستین و از گزینه های باز شده گزینه وسطی VacuumDatabase  رو میزنین که حجمش بیاد پایین

**دیتا بیس رو از اسست برنامه کپی میکنی داخل دیاراینترنال (قبل از اینکه از دیتابیس استفاده کنی باید کپی کردن در دیار اینترنال انجام بشه انجام بشه مثلا تو اولین اکتیویتی بعد از main)


	If File.Exists(File.DirInternal,"اسم دیتا بیس") = False Then
		File.Copy(File.DirAssets,"اسم دیتابیس",File.DirInternal,"اسم دیتا بیس")
	End If

**داخل اکتیویتی اسکیو ال و کورسور تعریف میکنین(بهتره توی پروسس گلوبال تعریف کنین)(چون گفتین دوتا تیبل دارین پس باید دوتا کورسور داشته باشین اسکیوال میتونه یدونه باشه برای دیتابیس در هر اکتیویتی اما برای هر تیبل باید جداگونه کورسور باز کنین و کوئری بگیرین)

Sub Process_Globals
	Dim sql As SQL
	Dim cur1 As Cursor
	Dim cur2 As Cursor
End Sub

اس کیو ال رو اینیشیالایز میکنی.برای اینکه سرعت برنامه ات کم نشه شرط میذاری اگه اینیشیالایز نشده بود بیاد اینیشیالایز کنه نه اینکه هر دفعه

	If sql.IsInitialized = False Then
		sql.Initialize(File.DirInternal,"اسم دیتابیس",False)
	End If

** حالا نوبت به پر کردن کوئری میرسه

	cur1 = sql.ExecQuery("select * from اسم تیبل where id")
	cur1.Position = 0

*الان دیگه میتونی اطلاعاتت رو داخل ایمیج ویو یا لیبل بریزی برای مثلا برای لیبل میشه

	Label1.Text = cur.GetString("اسم ستون")

برای ایمیج ویو هم که اون بالا گفتیم

 

امیدوارم مطلبی رو از قلم ننداخته باشم و مطالب بالا مفید واقع بشه:53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 ساعت قبل، davoodebrahimi گفته است :

سلام مجدد

من چون بهتون گفتم دقیقا مثل متن که ریختین توی لیبل به همون صورت اسم عکس رو هم بگیرین؛؛برا همین دیگه کورسور ننوشتم


java.lang.RuntimeException: Object should first be initialized (Cursor).

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


F:\project001\Objects\bin\extra\assets

نیاز به کاری که این بالا هم انجام دادین نیست.

شما الان بیاین از پروژه تون یه کپی بگیرین(هر موقع که توی مراحل ساخت به موفقیتی دست پیدا کردین حتما از سورس پروژه کپی بگیرین و مثلا به تاریخ همون روز ثبت کنین یجا بعدا شاید لازم بشه) وقتی کپی گرفتین یه نسخه شو جدا نگه دارین یه نسخه شو هم اینطور که میگم برین اگه جواب نگرفیتن برگردین سر همون پروژه ای که خودتون نوشتین و کپی گرفتین ازش

** اول یه از سالم بودن و کامل بودن اس دیکا و جی دیکا مطمعن شین(یه پروژه جدید ایجاد کنین؛؛سیو کنین؛؛بعد در حالت ریلیز کامپایل کنین اگه کامل کامپایل شد ینی حله)

** وقتی وارد پروژه میشین برا اولین بار دوتا پوشه اس یکیش آبجکت هست یکیش فایل؛؛شما داخل آبجکت کاری ندارین هر فایلی داشتین میزیزین داخل پوشه فایل که میشه همون اَسِسِت برنامه پس عکسارو فقط داخل این پوشه بریزین

** دیتا بیس رو اصلاح کنین (1-اسم دیتابیس؛اسم تیبل ها یا همون جدول ها و اسم فیلد ها به بزرگی و کوچکی کلمات حساس هستن و اگه اشتباه صورت بگیره خطایی میده که بیای متوجه بشین دوهفته طول میکشه پس بهتره همهم حروفات با حروف کوچک نوشته بشه--2-ستونی  که عکسا توش هستن رو پاک کنین فقط اسم عکسا بمونه کافیه --3--هربار که روی دیتابیس اطلاعاتی وارد کنین حجمش میره بالا و با حذف کردن اطلاعات هم حجمش کم نمیشه پس بعد پاک کردن عکسا لازمه یکاری کنین که حجم دیتابیس بیاد پایین(1-سمت چپ رو استم دیتا بیس دابل کلیک میکنین-2-روی main اول دابل کلیک میکنین و بعد کلیک راست میکنین و روی گزینه maintain وای میستین و از گزینه های باز شده گزینه وسطی VacuumDatabase  رو میزنین که حجمش بیاد پایین

**دیتا بیس رو از اسست برنامه کپی میکنی داخل دیاراینترنال (قبل از اینکه از دیتابیس استفاده کنی باید کپی کردن در دیار اینترنال انجام بشه انجام بشه مثلا تو اولین اکتیویتی بعد از main)


	If File.Exists(File.DirInternal,"اسم دیتا بیس") = False Then
		File.Copy(File.DirAssets,"اسم دیتابیس",File.DirInternal,"اسم دیتا بیس")
	End If

**داخل اکتیویتی اسکیو ال و کورسور تعریف میکنین(بهتره توی پروسس گلوبال تعریف کنین)(چون گفتین دوتا تیبل دارین پس باید دوتا کورسور داشته باشین اسکیوال میتونه یدونه باشه برای دیتابیس در هر اکتیویتی اما برای هر تیبل باید جداگونه کورسور باز کنین و کوئری بگیرین)


Sub Process_Globals
	Dim sql As SQL
	Dim cur1 As Cursor
	Dim cur2 As Cursor
End Sub

اس کیو ال رو اینیشیالایز میکنی.برای اینکه سرعت برنامه ات کم نشه شرط میذاری اگه اینیشیالایز نشده بود بیاد اینیشیالایز کنه نه اینکه هر دفعه


	If sql.IsInitialized = False Then
		sql.Initialize(File.DirInternal,"اسم دیتابیس",False)
	End If

** حالا نوبت به پر کردن کوئری میرسه


	cur1 = sql.ExecQuery("select * from اسم تیبل where id")
	cur1.Position = 0

*الان دیگه میتونی اطلاعاتت رو داخل ایمیج ویو یا لیبل بریزی برای مثلا برای لیبل میشه


	Label1.Text = cur.GetString("اسم ستون")

برای ایمیج ویو هم که اون بالا گفتیم

 

امیدوارم مطلبی رو از قلم ننداخته باشم و مطالب بالا مفید واقع بشه:53:

بینهایت ممنونم از لطفتون که وقت گذاشتین و این همه مطلبو نوشتین

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

این سورسی هم که الان دارم دو تا سورس رایگان رو باهم قاطی کردم اگه وقت دارین و حوصله شو دارین یه ایمیلی اکانتی چیزی بدین براتون بفرستم خودتون نگاش کنین و ب عنوان یه هدیه ی ناقابل میتونم سورسو بدم بهتون درسته چیز زیاد جالبی نیست ولی حداقل یه گرافیک جالب داره

اگرم نخواستین فدا سرتون بازم بینهایت بار ازتون ممنونم:give_heart:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خواهش میکنم وظیفه بود؛همین که شما یاد بگیری خودش خیلیه:53:

اگه مشکلی بود یا متوجه نشدین؛ایدیم @davoodebrahimi هست در حدی که بتونم در خدمتم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

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

به همون صورت که متن رو از دیتا بیس میگیری و میدی به لیبل؛اسم عکس رو هم بگیر و بذا داخل کد به شکل زیر

	img1.SetBackgroundImage(LoadBitmap(File.DirAssets,cur.GetString("اسم ستون عکس ها در دیتابیس")))

اگرم تعداد عکست زیاده برای اینکه برنامه تو گوشی های ضعیف کرش نکنه بجای استفاده از  loadbitmap   از   LoadBitmapsample  استفاده کن

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 1 ساعت قبل، davoodebrahimi گفته است :

سلام

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

به همون صورت که متن رو از دیتا بیس میگیری و میدی به لیبل؛اسم عکس رو هم بگیر و بذا داخل کد به شکل زیر


	img1.SetBackgroundImage(LoadBitmap(File.DirAssets,cur.GetString("اسم ستون عکس ها در دیتابیس")))

اگرم تعداد عکست زیاده برای اینکه برنامه تو گوشی های ضعیف کرش نکنه بجای استفاده از  loadbitmap   از   LoadBitmapsample  استفاده کن

سلام

ممنون از پاسخ گویی تون

همه ی عکسایی رو که تو دیتابیس گذاشته بودمو تو فایل زیر گذاشتم

F:\project001\Objects\bin\extra\assets

البته هر دفعه که کامپایل میکنم همه شون حذف میشن

وقتی برنامه رو ریلیز کامپایل میکنم این ارور رو میده

Packaging files.    Error

AAPT path: C:\Android\sdk\tools\..\build-tools\23.0.1\aapt.exe
Exit code:-1073741819

اینم بگم sdk , jdk هردو ب روزن و از api26 استفاده میکنم.

وقتی برنامه رو رو حالت دیباگ کامپایل میکنم مشکلی نداره ولی وقتی برنامه رو باز میکنم و میرم ب اون اکتیویتی که میخوام ایمیج ویو عکسای دیتا بیسو نشون بده از برنامه خارج میشه با ارور زیر

java.lang.RuntimeException: Object should first be initialized (Cursor).

البته اون کد شمارو ب این صورت نوشتم:

Dim cur As Cursor
	ImageView3.SetBackgroundImage(LoadBitmap(File.DirAssets,cur.GetString("sAx")))

قسمت     Dim cur As Cursor  رو خودم اضافه کردم چون cur  رو نمیشناخت

قبل اینا هم دیتابیسو تغییر دادم دیتابیس هم دو تا جدول داره ب نظرتون باید جدول رو هم مشخص کنم؟

%D8%B4.PNG

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 دقیقه قبل، jafarik گفته است :

سلام

ممنون از پاسخ گویی تون

همه ی عکسایی رو که تو دیتابیس گذاشته بودمو تو فایل زیر گذاشتم


F:\project001\Objects\bin\extra\assets

البته هر دفعه که کامپایل میکنم همه شون حذف میشن

وقتی برنامه رو ریلیز کامپایل میکنم این ارور رو میده


Packaging files.    Error

AAPT path: C:\Android\sdk\tools\..\build-tools\23.0.1\aapt.exe
Exit code:-1073741819

اینم بگم sdk , jdk هردو ب روزن و از api26 استفاده میکنم.

وقتی برنامه رو رو حالت دیباگ کامپایل میکنم مشکلی نداره ولی وقتی برنامه رو باز میکنم و میرم ب اون اکتیویتی که میخوام ایمیج ویو عکسای دیتا بیسو نشون بده از برنامه خارج میشه با ارور زیر


java.lang.RuntimeException: Object should first be initialized (Cursor).

البته اون کد شمارو ب این صورت نوشتم:


Dim cur As Cursor
	ImageView3.SetBackgroundImage(LoadBitmap(File.DirAssets,cur.GetString("sAx")))

قسمت     Dim cur As Cursor  رو خودم اضافه کردم چون cur  رو نمیشناخت

قبل اینا هم دیتابیسو تغییر دادم دیتابیس هم دو تا جدول داره ب نظرتون باید جدول رو هم مشخص کنم؟

%D8%B4.PNG

پوشه assets در واقع همون پوسه Files هست 

یعنی این ادرس 

F:\project001\Files

عکساتونو بریزید توی این پوشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، sbr گفته است :

پوشه assets در واقع همون پوسه Files هست 

یعنی این ادرس 


F:\project001\Files

عکساتونو بریزید توی این پوشه

ممنون

ولی از اول هم عکسا تو همون پوشه بودن

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...