استاپ ورکینگ برنامه حین اجرا
با سلام خدمت همه عزیزان
بنده یه مشکل دارم توی برنامه ام
برنامه ام رو نوشتن و دیتابیس رو به وسیله نرم افزار sqlite اضافه کردم ولی وقتی برنامه روی گوشی اجرا میکنم وقتی روی فهرست مطالب برنامه ام میزنم یا مثلا تنظیماتش یا هرچی که مربوط به دیتابیس باشه استاپ ورکینگ میده و از برنامه میاد بیرون. من کد دیتابیس برنامه رو میرازم براتون خواهش میکنم کمکم کنید خود اروری که بعد اجرای برنامه میزنه رو هم میزارم
ابتدا دیتا بیس برنامه سپس کد ارور دقیقا بعدش
public class DBH extends SQLiteOpenHelper
{
private Context main_context;
private static String DB_PATH;
private static String DB_NAME = "bestsoft_db.db";
private static int DB_VERSION = 1;
private static String DB_TBL_EBOOKS = "ebooks";
private static String DB_TBL_SETTINGS = "settings";
private SQLiteDatabase db;
public DBH(Context con)
{
super(con, DB_NAME, null, DB_VERSION);
main_context = con;
DB_PATH = con.getCacheDir().getPath() + "/" + DB_NAME;
}
@Override
public void onCreate(SQLiteDatabase db)
{
/* Do nothing*/
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
/* Do nothing*/
}
private boolean dbExists()
{
File f = new File(DB_PATH);
if (f.exists())
return true;
else
return false;
}
private boolean copyDB()
{
try {
FileOutputStream out = new FileOutputStream(DB_PATH);
InputStream in = main_context.getAssets().open(DB_NAME);
byte[] buffer = new byte[1024];
int ch;
while ((ch = in.read(buffer)) > 0) {
out.write(buffer, 0, ch);
}
out.flush();
out.close();
in.close();
return true;
}
catch(Exception e)
{
/*do nothing*/
return false;
}
}
public void open()
{
if (dbExists())
{
try
{
File temp = new File(DB_PATH);
db = SQLiteDatabase.openDatabase(
temp.getAbsolutePath(), null, SQLiteDatabase.OPEN_READWRITE
);
}
catch (Exception e)
{
/*do nothing*/
}
}
else
{
if (copyDB())
open();
}
}
@Override
public synchronized void close()
{
db.close();
}
public boolean setBookFavoriteState ( int id , int state)
{
ContentValues cv = new ContentValues();
cv.put("fav_flag",state);
long result = db.update(
DB_TBL_EBOOKS , cv , "id = ?" , new String[] {String.valueOf(id)}
);
if (result < 1)
return false;
else
return true;
}
public int getBookFavoriteState( int id )
{
Cursor result = db.rawQuery("SELECT * FROM " + DB_TBL_EBOOKS + " WHERE id = '" + id + "' " , null);
result.moveToFirst();
return Integer.parseInt( result.getString ( 3 ));
}
public List<HashMap<String , Object>> getTableOfContent() {
Cursor result = db.rawQuery("SELECT * FROM " + DB_TBL_EBOOKS , null);
List<HashMap<String, Object>> all_data = new ArrayList<>();
while (result.moveToNext()) {
HashMap<String, Object> temp = new HashMap<>();
temp.put("id", result.getString(0));
temp.put("title", result.getString(1));
if (result.getString( 3 ).equals("1"))
{
temp.put("fav_flag" , R.drawable.favorites);
}
else
{
temp.put("fav_flag" , R.drawable.nfavorites);
}
all_data.add(temp);
}
return all_data;
}
public HashMap<String, Object> getBookContent ( String id )
{
Cursor result = db.rawQuery("SELECT * FROM " + DB_TBL_EBOOKS + " WHERE id = '" + id + "' ", null);
result.moveToFirst();
HashMap<String, Object> all_data = new HashMap<>();
all_data.put( "id" , result.getString( 0 ));
all_data.put( "title" , result.getString( 1 ));
all_data.put( "content" , result.getString( 2 ));
if (result.getString( 3 ).equals("1"))
{
all_data.put("fav_flag" , R.drawable.favorites);
}
else
{
all_data.put("fav_flag" , R.drawable.nfavorites);
}
return all_data;
}
public List<HashMap<String , Object>> getTableOfFavoriteContent() {
Cursor result = db.rawQuery("SELECT * FROM " + DB_TBL_EBOOKS + " WHERE fav_flag = '1' ", null);
List<HashMap<String, Object>> all_data = new ArrayList<>();
while (result.moveToNext()) {
HashMap<String, Object> temp = new HashMap<>();
temp.put("id", result.getString(0));
temp.put("title", result.getString(1));
temp.put("fav_flag" , R.drawable.favorites);
all_data.add(temp);
}
return all_data;
}
public int getScreenState()
{
Cursor result = db.rawQuery(
"SELECT * FROM " + DB_TBL_SETTINGS + " WHERE key='screen' ", null
);
result.moveToFirst();
return Integer.parseInt( result.getString( 2 ));
}
public boolean setScreenState ( int state )
{
ContentValues cv = new ContentValues();
cv.put("value" , state);
long result = db.update(
DB_TBL_SETTINGS , cv , "key = ?" , new String[] {"screen"}
);
if (result < 1)
return false;
else
return true;
}
public int getFontSizeState()
{
Cursor result = db.rawQuery(
"SELECT * FROM " + DB_TBL_SETTINGS + " WHERE key='font_size' ", null
);
result.moveToFirst();
return Integer.parseInt( result.getString( 2 ));
}
public boolean setFontSize ( int size )
{
ContentValues cv = new ContentValues();
cv.put("value" , size);
long result = db.update(
DB_TBL_SETTINGS , cv , "key = ?" , new String[] {"font_size"}
);
if (result < 1)
return false;
else
return true;
}
}
اینم ارور برنامه
bestsofts.mohammaderfan.bestsoftwares E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo
{com.bestsofts.mohammaderfan.bestsoftwares/com.bestsofts.mohammaderfan.bestsoftwares.listofebook}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2377) at android.app.ActivityThread.access$600(ActivityThread.java:167) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5341) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.bestsofts.mohammaderfan.bestsoftwares.DBH.getTableOfContent(DBH.java:140) at com.bestsofts.mohammaderfan.bestsoftwares.listofebook.onCreate(listofebook.java:35) at android.app.Activity.performCreate(Activity.java:5125) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2289) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2377) at android.app.ActivityThread.access$600(ActivityThread.java:167) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5341) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) at dalvik.system.NativeStart.main(Native Method)
نکته دیگه اینکه وقتی رو عبارت (DBH.java:140) توی ارور کلیک میکنم خط زیر رو نشون میده
Cursor result = db.rawQuery("SELECT * FROM " + DB_TBL_EBOOKS , null);
و وقتی رو عبارت (listofebook.java:35) توی ارور کلیک میکنم عبارت زیر رو نشون میده
ebooks_list = db.getTableOfContent();
شرمنده اگه خیلی طولانی بود سوالم چون واقعا خیلی چیزی نمیدونستم راجع به مشکلم و تازه کارم هستم ممنون میشم اگه کمکم کنید. اگه نیاز بود قسمت دیگه ای از برنامه ام رو بفرستم بگید
با تشکر
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .