PDA

View Full Version : پیغام خطا در بروزرسانی دیتابیس در لیست ویو



babak6655
سه شنبه 11 فروردین 1394, 21:41 عصر
سلام من در لیست ویو بعد از نمایش خواستم که وقتی هر کدام از چک باکس ها کلیک شد مقدار آن در دیتابیس هم تغییر کنه و این کد رو در لیست ویو نوشتم ولی از ارسال مقادیر به متد و برگشتش خطا میگیره و کرش میکنه


public void fill(final ArrayAdapter<StructNote> adapter, final StructNote item, final int position) {
txt_name.setText(item.name);
// txtDescription.setText(item.description);
checkshow.setChecked(item.checshow);
checkshow.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View view) {
int ks;


CheckBox checkBox = (CheckBox) view;
handler = new DatabaseHandler();
DatabaseHandler db = new DatabaseHandler(null);
item.checshow = checkBox.isChecked();
// db.open();
if (item.checshow) {
ks = 1;
handler.Update_today(ks, item.id);
}
// db.close();
}
});


و این کد هم در قسمت آپیدیت دیتابیس نوشتم


public class DatabaseHandler
{


public static SQLiteDatabase database;
public static final String DIR_sdcard = Environment.getExternalStorageDirectory().getAbsol utePath();
public static final String DIR_database = DIR_sdcard + "/database_food/";
public static final String Registeration_food = "Registeration_food";
public static final String DATABASE_NAME = "tedatabase_foodst";
public static final int DATABASE_VERSION = 1;

public static final String TABLE_CREATE_Registeration_food = "CREATE TABLE IF NOT EXISTS Registeration_food " +
"(id_food INTEGER PRIMARY KEY AUTOINCREMENT " +
" NOT NULL UNIQUE , name_food TEXT, chkshow_food bool)";


DataBaseHelper dbhelper;
Context context;
SQLiteDatabase db;


public DatabaseHandler(Context ctx)
{
this.context = ctx;
dbhelper = new DataBaseHelper(context);
}


private static class DataBaseHelper extends SQLiteOpenHelper
{


public DataBaseHelper(Context ctx)
{
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}


@Override

public void onCreate(SQLiteDatabase db)
{
db.execSQL(TABLE_CREATE_Registeration_food);
}




@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST Registeration_food");

onCreate(db);
}
}




public DatabaseHandler open()
{

db = dbhelper.getWritableDatabase();
return this;
}




public void close()
{

dbhelper.close();
}
public long Update_today(int chk, int id) {
{
String s = "id_food =='" + id + "'";
String chkshow_food = "chkshow_food";


//This class is used to store a set of values
ContentValues content = new ContentValues();
content.put(chkshow_food, chk);


return db.update(Registeration_food, content, s, null);
}
}

Abbas Naghdi
سه شنبه 11 فروردین 1394, 21:53 عصر
سلام .
من ندیدم جایی دیتابیس رو باز کنی و یا ببندی !
بعدشم به جای DatabaseHandler(null); اون null رو پاک کن و this بزار ... Context Null معنی نداره .
پس کد آپدیت ایتمت کجاست ؟

babak6655
سه شنبه 11 فروردین 1394, 22:28 عصر
سلام .
من ندیدم جایی دیتابیس رو باز کنی و یا ببندی !
بعدشم به جای DatabaseHandler(null); اون null رو پاک کن و this بزار ... Context Null معنی نداره .
پس کد آپدیت ایتمت کجاست ؟

سلام
باز و بسته کردن دیتابیس رو گذاشتم بهش گیر داد و پیغام خطا گرفت
به جای null هم وقتی this قرار دمیدم خطا میگیره

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


handler = new DatabaseHandler(getBaseContext());
handler.open();
handler.Update_Registeration_food(name, dec, price, id);

Toast.makeText(getBaseContext(), "Your data in Update", Toast.LENGTH_LONG).show();
handler.close();





public long Update_Registeration_food(String name, String deser, String price, int id)
{
String s = "id_food =='" + id + "'";
String name_food = "name_food";
String dec_food = "dec_food";
String price_food = "price_food";


//This class is used to store a set of values
ContentValues content = new ContentValues();
content.put(name_food, name);
content.put(dec_food, deser);
content.put(price_food, price);//Adds a value to the set.
return db.update(Registeration_food, content, s, null);
}

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

DatabaseHandler db = new DatabaseHandler(getBaseContext);

Abbas Naghdi
سه شنبه 11 فروردین 1394, 22:37 عصر
ببین روش کد نویسیت کلا اشتباهه من نمیدونم چطور کار میکنه :)

اولا باید کلاس DatabaseHandler از SQLiteOpenHelper مشتق بشه
بعد اگه داخل activity همه کار ها رو انجام میده که نباید مشکلی داشته باشه اما اگه داخل یه کلاس داخل یه فایل جدا از activity که قراره لیست رو نمایش بده کدت رو مینویسی لازمه از Context استفاده کنی و activity جاری رو بهش پاس بدی و جواب رو برگردونی .

این یه نمونه از روش آپدیت و ارتباط با دیتابیس که خودم نوشتم پارامتر ها رو میگیره و آپدیت رو انجام میده .

public void Edit(String strTitle, String strWhere)
{
db = context.openOrCreateDatabase(db_Direct, context.MODE_PRIVATE, null);
db.execSQL("UPDATE "+tbl_tag+" SET Title='"+strTitle+"' WHERE Title='"+strWhere+"'");
db.close();
}



روش کد نویسی خیلی مهمه .

babak6655
سه شنبه 11 فروردین 1394, 23:30 عصر
ببین روش کد نویسیت کلا اشتباهه من نمیدونم چطور کار میکنه :)

اولا باید کلاس DatabaseHandler از SQLiteOpenHelper مشتق بشه
بعد اگه داخل activity همه کار ها رو انجام میده که نباید مشکلی داشته باشه اما اگه داخل یه کلاس داخل یه فایل جدا از activity که قراره لیست رو نمایش بده کدت رو مینویسی لازمه از Context استفاده کنی و activity جاری رو بهش پاس بدی و جواب رو برگردونی .

این یه نمونه از روش آپدیت و ارتباط با دیتابیس که خودم نوشتم پارامتر ها رو میگیره و آپدیت رو انجام میده .

public void Edit(String strTitle, String strWhere)
{
db = context.openOrCreateDatabase(db_Direct, context.MODE_PRIVATE, null);
db.execSQL("UPDATE "+tbl_tag+" SET Title='"+strTitle+"' WHERE Title='"+strWhere+"'");
db.close();
}



روش کد نویسی خیلی مهمه .

خوب داخل کلاس DatabaseHandler کلاس دیگری تعریف شده به نام DataBaseHelper
من این کلاس رو از جایی گرفتم، در عمل ثبت و آپدیت مشکلی نداشت، منهی تو این کلاسی که لیست ویو هست نمیزاره یک شی از کلاس DatabaseHandler بسازم ولی تو کلاسهای دگیه میزاره همین .