رفع یک اشکال قدیمی در اندروید استودیو

بعد از مدتها گوگل در نسخه جدید Android Studio یعنی ۰٫۴٫۶ یک اشکال قدیمی و ساده رو برطرف کرد. در حقیقت بیشتر شبیه به یه سوتی بود تا اشکال.

زمانی که شما یه پروژه جدید می ساختید وقتی نوع Activity را Blank Activity انتخاب می کردید یه Activity با یه fragment خالی در اختیار شما میذاشت و هیچ گزینه ای هم برای ساخت یک Activity خالی واقعی نداشت.

در نسخه ۰٫۴٫۶ شما میتونید خودتون انتخاب کنید که Blank Activity ساده برای شما ساخته بشه یا Blank Activity شامل یک Blank Fragment

no-fragment

پی نوشت: بعد از نصب این نسخه نیاز به بروزرسانی Gradle خواهید داشت و همیچنین باید نسخه Build Tools مورد استفاده را حداقل به ۱۹٫۰٫۰+ تغییر دهید در غیر اینصورت با دریایی از خطاها مواجه خواهید شد

متاسفانه در صورتی که از نسخه های پایینتر Build Tools استفاده می کنید این بروزرسانی آن را تغییر نمی دهد و شما خودتون باید نسخه اونو بروز کنید. برای انجام این کار باید فایل build.gradle پروژه رو اصلاح کنید

آشنایی با Transaction در Android

فرض کنید در برنامه اندروید مورد نظر ما دو جدول به نامهای A و B داریم که پس از ثبت رکورد در جدول A رکورد یا رکوردهای مرتبط با آن در جدول B ثبت خواهند شد. برای ما ارتباط بین رکوردهای ثبت شده در این جداول مهم است یعنی در صورتی که ثبت رکورد در جدول A موفقیت آمیز باشد اما ثبت رکورد در جدول B با شکست مواجه شود، باید مقادیر ثبت شده در جدول A هم ملغی شود. در این مورد باید از Transaction در برنامه استفاده کنیم.

برای استفاده از Transaction در برنامه های اندروید باید از متدهای کلاس SQLiteDatabase استفاده کنید. شبه کد زیر را همه آنچه را که باید در رابطه با Transaction بدانید به شما نشان داده است:

DbManager dbHelper=new DbManager(this);
SQLiteDatabase db= dbHelper.getWriteableDatabase();
db.beginTransaction();
try{
	//Insert into Table A
	//Insert into Table B
	Db.setTransactionSuccessful();
} catch{
//Error in insert data
} finally{
	Db.endTransaction();
}

در این مثال ابتدا یک شی از کلاس DbManager تعریف شده است. کلاس DbManager پیاده سازی کلاس SQLiteHelper است. سپس با فراخوانی متد getWriteableDatabase یک شی SQLiteDatabase به نام db ساخته شده است.
فراخوانی متد beginTransaction باعث می شود که Transaction آغاز شود. پس از ثبت اطلاعات مورد نیاز در دو جدول A و B با فراخوانی متد setTransactionSuccessfull به شی SQLiteDatabase اعلام می کنیم که مجموعه عملیات مورد نظر که در Transaction قرار گرفته اند با موفقیت انجام شده است. در بخش finally متد endTransaction فراخوانی شده است که با فراخوانی آن پایان Transaction اعلام می شد. در صورت رخ دادن هر خطایی در بخش try متد setTransactionSuccessfull فراخوانی نخواهد شد و در صورتی که متد endTransaction بدون فراخوانی این متد اجرا شود همه تغییرات roll back خواهند شد.

مقادیر Null در اندروید

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

برای مقداردهی این فیلدها به null باید از متد putNull از کلاس ContentValues استفاده کنید. تنها پارامتر اون نام فیلد مورد نظره که باید با null مقداردهی بشه

ContentValues values=new ContentValues();
values.putNull("price");

برای خوندن مقادیر این فیلدها باید ابتدا از متد isNull استفاده کنیم و مقدار آن فیلدو بررسی کنیم. به مثال زیر توجه کنید:

String sDescription="";
if(!cursor.isNull(cursor.getColumnIndex("Description"))){
    sDescription=cursor.getString(cursor.getColumnIndex("Description"));
}