کلیدستان

نسخه‌ی کامل: مشکل open و close کردن دیتابیس(لطفا کمک کنید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام

با جزئیات همش رو توضیح دادم لطفا ببینید چی کار کنم.از همگی ممنونم به خاطر وقتی که میذارند.

من برای ساخت دیتابیس از sqlite expert استفاده میکنم.
اول دیتابیسم رو ساختم و بعد با استفاده از کلاسی به نام database اون رو در مسیر گوشی گفتم کپی کنه تا بتونم حین اجرای برنامه از اون استفاده کنم.
وقتی می خوام از اطلاعات دیتابیسم استفده کنم اول در اکتیویتی Main متدی را از کلاس database ای که ساخته بودم فراخوانی میکنم تا دیتابیس رو در گوشی کپی کنه.
سپس میگم که وقتی روی فلان دکمه کلیک شد بره به اکتیویتی بعدی. وقتی به اکتیویتی بعدی میرم میخوام یه id رو در دیتابیس پیدا کنه و سطر اون رو انتخاب کنه.(در سطر اون مثلا اسم هست و فصل) بعد میخوام با استفاده از متدی که در دیتابیس نوشتم و اون رو اینجا فراخوانی میکنم id رو بگیره و مثلا اسم رو برگردونه. برای همین از این متد اسفاده میکنم:
کد پی‌اچ‌پی:
public String display_address(int id){
        
Cursor cu mydb.rawQuery("select * from database where id="+idnull);
        
String s=cu.getString(1);
        return 
s;
    } 
String s=cu.getString(2);
در این سطر بالا از کل کد های بالا بهش گفتم که اطلاعات اون سطر رو که در ستون دوم قرار داره در برداره.

در اکتیویتی اول یک شی از روی کلاس database ساختم و اسمش رو db گذاشتم سپس این متد را فراخوانی میکنم و id رو در پرانتز مینویسم.مثلا:
کد پی‌اچ‌پی:
db.open();
db.display_address(5);
db.close(); 
پس حالا به جایی از دیتابیس میره که id اونجا 5 باشه و بعد محتوای ستون دوم اون سطر برمیگردونه.
برای دو متد open  و  close از این کد ها استفاده کردم.
برای open:
کد پی‌اچ‌پی:
SQLiteDatabase mydb 
کد پی‌اچ‌پی:
public void open(){
        
mydb SQLiteDatabase.openDatabase(path+NamenullSQLiteDatabase.OPEN_READWRITE);
    } 
برای close:
کد پی‌اچ‌پی:
    public void close(){
            
mydb.close();
    } 
(اگه دستورات open و close کردن اشتباهه بگید. ولی این دستورات در برنامه ،دیتابیس رو درست باز کرد برای من)
حالا مثلا اون اسم رو با toast نشون میدم.
حالا وقتی برنامه رو اجرا میکنم toast اسم درست رو نشون میده ولی در logcat این ارور ها رو میده و وقتی که مرتبا از این اکتیویتی به اکتیویتی قبلی روم و دوباره به این برگردم هر دفعه ارور های logcat طولانی تر میشه و بعد از چندین بار forceclose میده.
ارور:
کد پی‌اچ‌پی:
08-25 16:11:44.050E/SQLiteDatabase(3538): close() was never explicitly called on database 'data/data/com.example.myapp/databases/database' 
08-25 16:11:44.050E/SQLiteDatabase(3538): android.database.sqlite.DatabaseObjectNotClosedExceptionApplication did not close the cursor or database object that was opened here
08
-25 16:11:44.050E/SQLiteDatabase(3538):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1943)
بعد از این خط هم همینطور 
at 
.......
at .......
at .......
میاره که به جای .....آدرس میده مثله خط آخر سه خط بالا 
من تو سایت های خارجی دیدم وقتی کسی این سوال رو می پرسه میکن باید cursor و database ر ببنده. من کار های اون رها را انجام دادم ولی کار نداد. یا من اشتباه انجام دادم یا اون ها اشتباه گفتند.


لطفا اگه با این موضوع آشنایی دارید بگید چی کار کنم این ارور بره تا ببینم force close برنامه به خاطر اینه یا نه.
اگه نمیدونید همین خط
کد پی‌اچ‌پی:
close() was never explicitly called on database 
رو تو گوگل سرچ کنید جوابای دیگران میاد. ببینید اگه متوجه شدید کمکم کنید.

میبینید خیلی توضیحاتم رو با جزئیات نوشتم که مشکلی برای شما پیش نیاد برای فهمیدم روش من.
منتظر هستم
از همه ممنونم