2013-12-16 58 views
0

當我運行我的模擬器時出現錯誤,並嘗試開始閱讀或查看數據庫..查看/編寫數據庫SQLite時發生致命異常?

請在此頁面的底部看到我的logcat!

我有一個數據庫活動,一個SQLView活動和一個SQLite活動。

數據庫活動是運行數據庫,SQLView活動來查看數據庫,最後一個,我的SQLite活動是wrie到我的數據庫。

我使用SQLiteAssetHelper,而我的.rar文件位於我的assets/databases/Voedsel.rar中。

這是我的活動:

我的數據庫活動:

package com.jacob.eindproject; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 

import java.sql.*; 

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; 

public class Database extends SQLiteAssetHelper { 

    public static final String KEY_PRODUCT = "Product"; 
    public static final String KEY_EENHEID = "Eenheid"; 
    public static final String KEY_KCAL = "Kcal"; 

    private static final String DATABASE_NAME = "Voedsel"; 
    private static final String DATABASE_TABLE = "Voeding"; 
    private static final int DATABASE_VERSION = 1; 

    private DbHelper ourHelper; 
    private Context Context; 
    private SQLiteDatabase ourDatabase; 

    private static class DbHelper extends SQLiteAssetHelper{ 

     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 
     } 

    } 

     @Override 
     public void onUpgrade(SQLiteDatabase Voedsel, int oldVersion, int newVersion) { 
      Voedsel.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(Voedsel); 
     } 



    public Database(Context context){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    public Database open() throws SQLException{ 
     ourHelper = new DbHelper(Context); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this;   
    } 

    public void close() { 

    ourHelper.close(); 
} 



    public long createEntry(String product, String kcal, String eenheid) { 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_PRODUCT, product); 
     cv.put(KEY_EENHEID, eenheid); 
     cv.put(KEY_KCAL, kcal); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 

    } 

    public String getData() { 
     // TODO Auto-generated method stub 
     String[] columns = new String[]{ KEY_PRODUCT, KEY_EENHEID, KEY_KCAL}; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
     String result = ""; 

     int iProduct = c.getColumnIndex(KEY_PRODUCT); 
     int iEenheid = c.getColumnIndex(KEY_EENHEID); 
     int iKcal = c.getColumnIndex(KEY_KCAL); 

     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
      result = result + c.getString(iProduct) + " " + c.getString(iEenheid) + " " + c.getString(iKcal) + "\n"; 


     } 

     return result; 
    } 

    public void close(Database database) { 
     // TODO Auto-generated method stub 

    } 



} 

我的SQLite的活動:

public class SQLite extends Activity implements View.OnClickListener { 

    Button sqlUpdate, sqlView; 
    EditText sqlVoeding, sqlKcal, sqlEenheid; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sqllite); 
     sqlUpdate = (Button) findViewById(R.id.bSQLUpdate); 
     sqlVoeding = (EditText) findViewById(R.id.etSQLVoeding); 
     sqlEenheid = (EditText) findViewById(R.id.etSQLEenheid); 
     sqlKcal = (EditText) findViewById(R.id.etSQLKcal); 

     sqlView = (Button) findViewById(R.id.bSQLopenView); 
     sqlView.setOnClickListener((android.view.View.OnClickListener) this); 
     sqlUpdate.setOnClickListener((android.view.View.OnClickListener) this); 
    } 

    public void onClick(View arg0) { 
     switch (arg0.getId()) { 
     case R.id.bSQLUpdate: 


      boolean didItWork = true; 
      try{    
      String voeding = sqlVoeding.getText().toString(); 
      String Kcal = sqlKcal.getText().toString(); 
      String eenheid = sqlEenheid.getText().toString(); 

      Database entry = new Database(SQLite.this); 
      entry.open(); 
      entry.createEntry(voeding, Kcal, eenheid); 
      entry.close(); 

      }catch (Exception e){ 
       didItWork = false; 

      }finally{ 
       if (didItWork){ 
        Dialog d = new Dialog(this); 
        d.setTitle("Heak Yeay"); 
        TextView tv = new TextView(this); 
        tv.setText("Succes"); 
        d.setContentView(tv); 
        d.show(); 
      } 
     } 

      break; 
     case R.id.bSQLopenView: 
      Intent i = new Intent(this, SQLView.class); 
      startActivity(i); 


     } 
     } 

    public void onClick(DialogInterface arg0, int arg1) { 
     // TODO Auto-generated method stub 

    } 

    } 

而且SQLView活動:

public class SQLView extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sqlview); 
     TextView tv = (TextView) findViewById(R.id.tvSQLinfo); 
     Database info = new Database(this); 
     info.open(); 
     String data = info.getData(); 
     info.close(); 
     tv.setText(data); 
    } 
} 

這是我的logca牛逼錯誤,當我點擊SQLView活動:

12-16 14:28:26.883: E/AndroidRuntime(1170): FATAL EXCEPTION: main 
    12-16 14:28:26.883: E/AndroidRuntime(1170): java.lang.NoClassDefFoundError: com.jacob.eindproject.Database 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at com.jacob.eindproject.SQLView.onCreate(SQLView.java:14) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.Activity.performCreate(Activity.java:5133) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.os.Looper.loop(Looper.java:137) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at java.lang.reflect.Method.invokeNative(Native Method) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at java.lang.reflect.Method.invoke(Method.java:525) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    12-16 14:28:26.883: E/AndroidRuntime(1170):  at dalvik.system.NativeStart.main(Native Method) 

這是我的錯誤,當我點擊我的「寫」活動:

12-16 14:27:35.913: E/AndroidRuntime(999): FATAL EXCEPTION: main 
12-16 14:27:35.913: E/AndroidRuntime(999): java.lang.NoClassDefFoundError: com.jacob.eindproject.Database 
12-16 14:27:35.913: E/AndroidRuntime(999): at com.jacob.eindproject.SQLite.onClick(SQLite.java:45) 
12-16 14:27:35.913: E/AndroidRuntime(999): at android.view.View.performClick(View.java:4240) 
12-16 14:27:35.913: E/AndroidRuntime(999): at android.view.View$PerformClick.run(View.java:17721) 
12-16 14:27:35.913: E/AndroidRuntime(999): at android.os.Handler.handleCallback(Handler.java:730) 
12-16 14:27:35.913: E/AndroidRuntime(999): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-16 14:27:35.913: E/AndroidRuntime(999): at android.os.Looper.loop(Looper.java:137) 
12-16 14:27:35.913: E/AndroidRuntime(999): at android.app.ActivityThread.main(ActivityThread.java:5103) 
12-16 14:27:35.913: E/AndroidRuntime(999): at java.lang.reflect.Method.invokeNative(Native Method) 
12-16 14:27:35.913: E/AndroidRuntime(999): at java.lang.reflect.Method.invoke(Method.java:525) 
12-16 14:27:35.913: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
12-16 14:27:35.913: E/AndroidRuntime(999): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-16 14:27:35.913: E/AndroidRuntime(999): at dalvik.system.NativeStart.main(Native Method) 

希望有人能幫助我解決我的錯誤。預先感謝您抽出寶貴時間。

Jacob。

+0

您是否嘗試過一個乾淨的構建?項目 - >清潔 –

+0

「數據庫」類在哪裏? – Raghunandan

+0

@AndrewFielden是的,我有。 – user3104217

回答

1

我不認爲你已經正確地將SQLiteAssetHelper庫添加到你的項目。 您必須確保項目的構建路徑正確,並選擇了所有引用的庫。

右鍵單擊您的項目並選擇「屬性」

點擊「Android的

確保您SQLiteAssetHelper庫選擇

+1

我沒有看到任何選項點擊? – user3104217

相關問題