Mobil kutubxona dasturining strukturasini yaratish
Mobil kutubxona dasturini yaratishda bizga quyidagi bilimlar kerak boladi:
- Android operatsion tizimida oynalar bilan ishlash (Intentlar);
- Android operatsion tizimida malumotlar ombori bilan ishlash (SQLite);
- Android operatsion tizimida shakllar bilan ishlash (View);
- Android operatsion tizimida tizim resurslari bilan ishlash (Time, Date).
Intentlar bu Android dasturidagi muloqat oynalarini boshqaruvchi maxsus obekt bolib, bir oynadan ikkinchi oynani chaqirish, oyna holatlarini boshqarish, oynani yopish va oynani ochirib tashlash kabi amallarni bajaradi.
Androidda tuziladigan dasturlarning aksariyati kop oynali dasturlar hisoblanadi. Masalan, biror bir foydali dastur yaratilganda, foydalanuvchi dasturning muallifi haqida malumot olmoqchi bolsa, Dastur haqida tugmasini bosish bilan dastur haqidagi toliq malumotni beruvchi muloqat oynasiga tushadi. Bu veb sahifalarda gipermurojaat orqali biridan ikkinchisiga otishga oxshaydi. Oddiy misol orqali bir oynadan ikkinchisiga otishni quyidagicha bajariladi.
Android Studioda yangi loyixa yaratib, unda yangi XML layout yaratamiz va
about.xml deb nomlaymiz. Bu faylni quyidagi XML kod bilan toldiramiz:
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_height="wrap_content" android:visibility="gone" android:layout_gravity="center" android:gravity="center_horizontal|center_vertical|top" android:text="@string/buy_from_market" />
Malumot oldindan elon qilingan ozgarmaslarda olinadi.
Shuning uchun bu ozgarmaslarni res/values/strings.xml faylida elon qilib qoyamiz.
Mobil kutubxona dasturiga xush kelibsiz Endi oyna sarlavhasi uchun ozgarmas elon qilinadi.
Dastur haqida Songra dastur kodlarini yozish uchun yangi Class yaratiladi va uni AboutActivity.java deb nomlanadi. Ichiga quyidagi kod yoziladi: package mobil.kutubxona.helloworld;
import android.app.Activity;
import android.os.Bundle;
public class AboutActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
}
}
Bu klassda eng asosiy usul bu onCreate() va setContentView() usullaridir. Chunki aynan ular klass yaratilayotgan vaqtda kerakli malumotni korsatish uchun xizmat qiladi. Endi Helloworld.java klassi orqali undagi tugma bosilganda AboutActivity.java ga otish kodlari yoziladi. Bunda bizga Intent klassi togri keladi:
import android.content.Intent;
Tugma uchun Click metodini yozamiz:
public void onClick(View v)
{
Intent intent = new Intent(HelloWorld.this, AboutActivity.class);
startActivity(intent);
}
Yangi oyna yuklanishi uchun Intent klassida AboutActivity klassini korsatib qoyish kerak. Songra startActivity() usuli chaqiriladi. Undan oldin esa yangi Activity klassni AndroidManifest.xml ga kiritib qoyish kerak boladi:
android:label="@string/about_title">
Emulyatorni ishga tushirib natijani korishimiz mumkin (5.1 rasm).
Android malumotlar bazasi bilan ishlash mexanizmida strukturali axborotlarga ishlov berish va saqlash imkoniyati mavjud. Istalgan ilova oziga tegishli malumotlar bazasini yaratishi va ular ustida toliq nazorat otkazishi mumkin. Android SQLite kutubxonasidan foydalanib, MBBT malumotlarini ozidan korsatib, quyidagi oziga xos xususiyatlarga ega: kolami kengligi (open source), tranzaksiya va sorovlarning standart tili, osonligi va bir xil darajaliligidir.
Malumotlar relyaatsion korinishga ega emas, chunki malumotlar bazasi bitta obekt bilan ishlagani va asosiy malumotlarni serverdan yuklagani uchun ham malumotlar bazasida bolinmas bitta jadval yaratildi. Bu jadvalga kitoblar haqidagi barcha malumotlar saqlandi. Shunindek kategoriyalar va turli kutilayotgan yangiliklar haqidagi malumotlar masofadagi serverdan json formatda yuklanadigan qilindi.
Sorovlar MBBTga Cursor tipining obektlarini qaytaradi. Resurslar tejamkorligi uchun malumotlar qabul qilanayotganda MBBTdan ularning qiymatlarini qaytarmaydi. Cursor yaratilayotganda esa dastlabki malumotlarning toplamiga yol beradi. Cursor obektining usullari har xil navigatsiya imkoniyatlarini taqdim etadi:
- moveToFirst;
- moveToNext;
- moveToPrevious;
- getCount;
- getColumnIndexOrThrow;
- getColumnName;
- getColumnNames;
- moveToPosition;
- getPosotion.
obektlari ishlatiladi. Har bir shunday obekt jadvalda bir satr malumotlarini oz ichiga oladi.
SQLite MBBT bilan ishlash. Mobil ilova yaratishda MBBTdan foydalaniladi. Kop hodisalarda ORM (Object-Relationship Mapping) deb nomlanuvchi qulay instrumentlardan foydalaniladi. Berilgan malumotlarni obektlarga bir yoki bir nechta jadvallarga joylashtirish dasturlash tilida beriladi. Bundan tashqari ORM MBBT bilan birgalikda majburiyatlarni oziga olib, jadval strukturasini va aniqlikdan qochib eng muhim tomonlaridan foydalanishga harakat qiladi. Afsuski, hozirgi vaqtda ORM mobil platformasining imkoni chegaralangan bolgani uchun androiddan amaliyotda qollanilmaydi. Ilova ishlashida bilim bilan yondashish MBBT bilan barcha ozaro aloqalarni bir sinfda inkapsulatsiya qilishdir. Malumotlar bazasi adapteri shuningdek malumotlar bazasini yaratish, yopish va ochish uchun usullarni hammasini aniqlaydi va malumotlar bazasiga sorovlarni qayta ishlashga
yuboradi. Adapterning ishlashi quyida berilgan:
public class SampleDBAdapter {
private static final String DATABASE_NAME = "SampleDatabase.db";
private static final String DATABASE_TABLE = "SampleTable";
private static final intDATABASE_VERSION = 1;
// Indeks ustunining nomi
public static final String KEY_ID = "_id";
// Har bir ustun uchun nom berish
public static final String KEY_NAME = "name";
public static final intNAME_COLUMN = 1;
// MBni yaratish uchun SQL- sorov
private static final String DATABASE_CREATE = "create table "
+ DATABASE_TABLE + " (" + KEY_ID
+ " integer primary key autoincrement, " + KEY_NAME
+ " textnotnull);";
// MB obektini saqlash uchun ozgaruvchi
private SQLiteDatabasedb;
// Dastur konteksti
private finalContextcontext;
// MBni yangilash va ochish uchun yordamchi klass
private myDbHelperdbHelper;
// Konstruktor
public SampleDBAdapter(Context _context) {
context = _context;
dbHelper = new myDbHelper(context, DATABASE_NAME, null,
DATABASE_VERSION);
}
// Malumotlar omboriga kirish
public SampleDBAdapter open() throws SQLException {
try {
db = dbHelper.getWritableDatabase();
}
catch (SQLiteException e) {
db = dbHelper.getReadableDatabase();
}
return this;
}
// Mbni yopish
public void close() {
db.close();
}
// Malumotlarni qoshish metodi, bu metod malumot indeksini qaytaradi.
public long insertEntry(SampleObject _SampleObject) {
// Bu erda oz ichida kerakli malumotlar joylashgan va MBga qoyilishi
//rejalashtirilgan ContentValues obekti yasaladi
returnindex;
}
// Indeksi boyicha malumotni ochirish
public booleanremoveEntry(long _rowIndex) {
returndb.delete(DATABASE_TABLE, KEY_ID + "=" +
_rowIndex, null) > 0;
}
// Barcha malumotlarni olish metodi
public Cursor getAllEntries() {
returndb.query(DATABASE_TABLE, new String[] { KEY_ID,
KEY_NAME },
null, null, null, null, null);
}
// indeksi boyicha obektning ekzemplyarni natija sifatida qaytaradi
public SampleObjectgetEntry(long _rowIndex) {
// kursorni qabul qiladi, MBdan kerakli malumotlarni korasatadi
returnobjectInstance;
}
// Indeks boyicha obektni ozgartirish
public boolean updateEntry(long _rowIndex, SampleObject _SampleObject)
{
// SampleObject asosida ContentValues obektini yasash
// jadvalda satrni yangilash uchun qollash
return true; // Yangilansa true, aks holda false
}
// Mbni ochish va yangilash uchun yordamchi klass
private static class myDbHelperextends SQLiteOpenHelper {
public myDbHelper(Context context, String name,
CursorFactory factory, intversion) {
super(context, name, factory, version);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int_oldVersion,
int_newVersion) {
// malumtlarni jurnalga qayd qilib boorish
Log.w("TaskDBAdapter", "Upgrading from version " + _oldVersion
+ " to " + _newVersion
+ ", which will destroy all old data");
Dasturning yashash davri sxemasi quyidagicha (5.3 rasm):
rasm. Dasturning yashash davri sxemasi.
Mobil kutubxona dasturining strukturasi quyidagicha (5.4 rasm):