لایه دیتابیس – B4A

Android SDK Resources

نسخه 1.1

هدف این لایه، دریافت نقاطی از پایگاه داده و نمایش یک نشان‌گر به ازای هر کدام از آن‌ها بر روی نقشه است.

سپس در فایل Main پروژه در قسمت Region Project Attributes خط زیر را اضافه کنید:

#AdditionalJar: common-release.aar

در پنجره Files Manager دکمه Add Files را کلیک کنید و فایل دیتابیس database.sqlite را به فایل های پروژه اضافه نمایید. 

جهت پیاده سازی این مثال، باید کتابخانه های زیر را در پنجره Libraries Manager تیک بزنید:

  • SQL (جهت ارتباط با دیتابیس)
  • Reflection (جهت بدست آوردن Package name مربوط به اپلیکیشن)

activity_database_layer.bal

در Visual designer زیر که مربوط به Layout اکتیویتی لایه دیتابیس است، یک View ی نقشه و یک Toggle button وجود دارد که پس از کلیک روی آن در صورت فعال بودن دکمه، لایه دیتابیس روی نقشه نمایش داده شده و در صورت خاموش بودن دکمه، لایه حذف میشود.

جهت تعریف شیء نقشه در کد روی View ی مربوط به نقشه که نام آن در این مثال NeshanMapSdk1 است راست کلیک کرده و از منوی باز شونده Generate، گزینه Dim NeshanMapSdk1 as NeshanMapSdk را انتخاب میکنیم. پس از این عمل، شیء نقشه در فایل کد مربوط به اکتیویتی لایه دیتابیس (DatabaseLayerActivity) در قسمت Globals اضافه میشود.

            Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.

	Private NeshanMapSdk1 As NeshanMapSdk
End Sub
        

جهت ایجاد Event مربوط به ToggleButton، به Visual Designer مربوط به اکتیویتی DatabaseLayerActivity رفته و روی ToggleButton راست کلیک کنید و از منوی باز شونده Generate گزینه CheckedChange را انتخاب کنید تا Event مربوط به تغییر مقدار ToggleButton به اکتیویتی اضافه شود.

            Private Sub ToggleDatabaseLayerButton_CheckedChange(Checked As Boolean)

End Sub
        

خواندن نقاط از دیتابیس و نمایش روی نقشه

جهت ارتباط با دیتابیس فایل database.sqlite را در فولدر DirInternal از فولدر DirAssets توسط قطعه کد زیر کپی کنید. قطعه کد زیر مربوط به Toggle button است که در صورتی که دکمه در حالت روشن باشد، چک میشود که آیا در فولدر DirInternal دیتابیس وجود دارد یا خیر، در صورتی که وجود نداشت، آن را از فولدر DirAssets درون DirInternal کپی میکند. در غیر اینصورت اگر دکمه در حالت خاموش باشد، با دستور clearMarkers که روی شیء NeshanMapSdk صدا زده میشود، مارکرهای از قبل اضافه شده روی نقشه را حذف میکند.

            Private Sub ToggleDatabaseLayerButton_CheckedChange(Checked As Boolean)
	If Checked Then
		If File.Exists(File.DirInternal, "database.sqlite") = False Then
			File.Copy(File.DirAssets, "database.sqlite", File.DirInternal, "database.sqlite")
		End If
			ReadDataBase
		Else
			NeshanMapSdk1.clearMarkers
	End If
End Sub
        

درون database ی که در فولدر assets وجود دارد یک جدول به نام points قرار دارد. قطعه کد زیر پس از ارتباط با دیتابیس و خواندن نقاط از جدول points، توسط یک حلقه Do While نقاط استخراج شده را پیمایش میکند و به ازای هر نقطه یک نشانگر به نقشه اضافه میکند.

خروجی حاصل از Query اجرا شده روی دیتابیس داخل متغیری به نام ResultSet1 از نوع ResultSet ریخته میشود.توسط متد NextRow که روی شیء ResultSet1 صدا زده میشود، میتوان رکوردهای استخراج شده از جدول points را توسط یک حلقه استخراج کرد.

            Private Sub ReadDataBase
	Dim reflector As Reflector
	Dim sql As SQL
	Dim ResultSet1 As ResultSet
	sql.Initialize(File.DirInternal,"database.sqlite",False)
	ResultSet1 = sql.ExecQuery("SELECT * FROM 'points'")
	Dim package As String= reflector.GetStaticField("anywheresoftware.b4a.BA", "packageName")
	Private markerDrawable As Int = reflector.GetStaticField(package & ".R$drawable", "icon")
	Do While ResultSet1.NextRow
		NeshanMapSdk1.addMarker(markerDrawable,25,ResultSet1.GetDouble("lat"),ResultSet1.GetDouble("lng"))
	Loop
	ResultSet1.Close
	NeshanMapSdk1.setCameraZoom(12,0.5)
End Sub
        

نسخه 1.0

هدف این لایه، دریافت نقاطی از پایگاه داده و نمایش یک نشان‌گر به ازای هر کدام از آن‌ها بر روی نقشه است.

سپس در فایل Main پروژه در قسمت Region Project Attributes خط زیر را اضافه کنید:

#AdditionalJar: common-release.aar

در پنجره Files Manager دکمه Add Files را کلیک کنید و فایل دیتابیس database.sqlite را به فایل های پروژه اضافه نمایید. 

جهت پیاده سازی این مثال، باید کتابخانه های زیر را در پنجره Libraries Manager تیک بزنید:

  • SQL (جهت ارتباط با دیتابیس)
  • Reflection (جهت بدست آوردن Package name مربوط به اپلیکیشن)

activity_database_layer.bal

در Visual designer زیر که مربوط به Layout اکتیویتی لایه دیتابیس است، یک View ی نقشه و یک Toggle button وجود دارد که پس از کلیک روی آن در صورت فعال بودن دکمه، لایه دیتابیس روی نقشه نمایش داده شده و در صورت خاموش بودن دکمه، لایه حذف میشود.

جهت تعریف شیء نقشه در کد روی View ی مربوط به نقشه که نام آن در این مثال NeshanMapSdk1 است راست کلیک کرده و از منوی باز شونده Generate، گزینه Dim NeshanMapSdk1 as NeshanMapSdk را انتخاب میکنیم. پس از این عمل، شیء نقشه در فایل کد مربوط به اکتیویتی لایه دیتابیس (DatabaseLayerActivity) در قسمت Globals اضافه میشود.

            Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.

	Private NeshanMapSdk1 As NeshanMapSdk
End Sub
        

جهت ایجاد Event مربوط به ToggleButton، به Visual Designer مربوط به اکتیویتی DatabaseLayerActivity رفته و روی ToggleButton راست کلیک کنید و از منوی باز شونده Generate گزینه CheckedChange را انتخاب کنید تا Event مربوط به تغییر مقدار ToggleButton به اکتیویتی اضافه شود.

            Private Sub ToggleDatabaseLayerButton_CheckedChange(Checked As Boolean)

End Sub
        

خواندن نقاط از دیتابیس و نمایش روی نقشه

جهت ارتباط با دیتابیس فایل database.sqlite را در فولدر DirInternal از فولدر DirAssets توسط قطعه کد زیر کپی کنید. قطعه کد زیر مربوط به Toggle button است که در صورتی که دکمه در حالت روشن باشد، چک میشود که آیا در فولدر DirInternal دیتابیس وجود دارد یا خیر، در صورتی که وجود نداشت، آن را از فولدر DirAssets درون DirInternal کپی میکند. در غیر اینصورت اگر دکمه در حالت خاموش باشد، با دستور clearMarkers که روی شیء NeshanMapSdk صدا زده میشود، مارکرهای از قبل اضافه شده روی نقشه را حذف میکند.

            Private Sub ToggleDatabaseLayerButton_CheckedChange(Checked As Boolean)
	If Checked Then
		If File.Exists(File.DirInternal, "database.sqlite") = False Then
			File.Copy(File.DirAssets, "database.sqlite", File.DirInternal, "database.sqlite")
		End If
			ReadDataBase
		Else
			NeshanMapSdk1.clearMarkers
	End If
End Sub
        

درون database ی که در فولدر assets وجود دارد یک جدول به نام points قرار دارد. قطعه کد زیر پس از ارتباط با دیتابیس و خواندن نقاط از جدول points، توسط یک حلقه Do While نقاط استخراج شده را پیمایش میکند و به ازای هر نقطه یک نشانگر به نقشه اضافه میکند.

خروجی حاصل از Query اجرا شده روی دیتابیس داخل متغیری به نام ResultSet1 از نوع ResultSet ریخته میشود.توسط متد NextRow که روی شیء ResultSet1 صدا زده میشود، میتوان رکوردهای استخراج شده از جدول points را توسط یک حلقه استخراج کرد.

            Private Sub ReadDataBase
	Dim reflector As Reflector
	Dim sql As SQL
	Dim ResultSet1 As ResultSet
	sql.Initialize(File.DirInternal,"database.sqlite",False)
	ResultSet1 = sql.ExecQuery("SELECT * FROM 'points'")
	Dim package As String= reflector.GetStaticField("anywheresoftware.b4a.BA", "packageName")
	Private markerDrawable As Int = reflector.GetStaticField(package & ".R$drawable", "icon")
	Do While ResultSet1.NextRow
		NeshanMapSdk1.addMarker(markerDrawable,25,ResultSet1.GetDouble("lat"),ResultSet1.GetDouble("lng"))
	Loop
	ResultSet1.Close
	NeshanMapSdk1.setCameraZoom(12,0.5)
End Sub
        
فهرست مطالب این صفحه