mercredi 8 juillet 2015

SQLiteAssetHelper example crashes

I'm trying to implement the SQLiteAssetHelper library to use my external database in the application. I try the example code on github but the application keep crashing. According to logcat, there's error in initializing the MyDatabase class

07-08 13:34:55.459: E/AndroidRuntime(6242): FATAL EXCEPTION: main
07-08 13:34:55.459: E/AndroidRuntime(6242): Process: com.example.externaldatabasequery, PID: 6242
07-08 13:34:55.459: E/AndroidRuntime(6242): java.lang.NoClassDefFoundError: com.example.externaldatabasequery.MyDatabase
07-08 13:34:55.459: E/AndroidRuntime(6242):     at com.example.externaldatabasequery.MainActivity.onCreate(MainActivity.java:19)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.Activity.performCreate(Activity.java:5990)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.os.Looper.loop(Looper.java:135)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at android.app.ActivityThread.main(ActivityThread.java:5254)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at java.lang.reflect.Method.invoke(Native Method)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at java.lang.reflect.Method.invoke(Method.java:372)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
07-08 13:34:55.459: E/AndroidRuntime(6242):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Here's the Mydatabase.java class

package com.example.externaldatabasequery;


import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;


import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class MyDatabase extends SQLiteAssetHelper {

     private static final String DATABASE_NAME = "extenalDB.db";
     private static final int DATABASE_VERSION = 1;

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

     public Cursor getEmployees() {

      SQLiteDatabase db = getReadableDatabase();
      SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

      String [] sqlSelect = {"0 _id","E_NAME","E_AGE"}; 
      String sqlTables = "EMP_TABLE";

      qb.setTables(sqlTables);
      Cursor c = qb.query(db, sqlSelect, null, null,
        null, null, null);

      c.moveToFirst();
      return c;

     } }

and MainActivity.java class

package com.example.externaldatabasequery;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;

public class MainActivity extends ListActivity {

     private Cursor students;
     private MyDatabase db;

     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.list_example);

      db = new MyDatabase(this);
      Thread th = new Thread(){
          public void run(){
              students = db.getEmployees(); 
          }
      };
      th.start();

      ListAdapter adapter = new SimpleCursorAdapter(this, 
              R.layout.list_example_entry, 
        students,
        new String[] {"name","age"}, //table values 
        new int[] {R.id.name_entry,R.id.number_entry});

      this.setListAdapter(adapter);
     }

     @Override
     protected void onDestroy() {
      super.onDestroy();
      students.close();
      db.close();
     } }

Aucun commentaire:

Enregistrer un commentaire