آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استاپ ورکینگ برنامه حین اجرا

optimus  10 سال پیش  10 سال پیش
0 0

با سلام خدمت همه عزیزان

بنده یه مشکل دارم توی برنامه ام

برنامه ام رو نوشتن و دیتابیس رو به وسیله نرم افزار 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();

شرمنده اگه خیلی طولانی بود سوالم چون واقعا خیلی چیزی نمیدونستم راجع به مشکلم و تازه کارم هستم ممنون میشم اگه کمکم کنید. اگه نیاز بود قسمت دیگه ای از برنامه ام رو بفرستم بگید

با تشکر

0 0
دوست عزیز اصلا convention جاوا در سورس کد شما رعایت نشده پس خیلی از دوستان به پاسخ به این سوالات رغبت نمیکنن، پیشنهاد میکنم که به جای DB_TBL_EBOOKS از نام خود جدول در کوئری هاتون استفاده کنید و const ها رو فقط با حروف بزرگ بنویسید نه فیلدهای none-static ، در ضمن شما اصلا متدی به اسم getTableOfContent رو در هیچ جای کدتون تعریف نکردین اگه در کلاس دیگه ای تعریفش کردین نام کلاس رو بنویسید و یه نقطه بعد نام متد استاتیک رو بنویسید، بخاطر این هستش که خطای null بودن رو میده ! (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .