I am creating a database in sqlitebrowser. I copy that database file by manually converting to .sqlite
format and copy it to assets->databases->(file) . and try to access it, but I am not able to do so.
My database code is
public class Data extends SQLiteOpenHelper
{
SQLiteDatabase databaseobject;
static String DB_PATH = "/data/data/vishesh.goswami.ithinkk/databases/";
static String DB_NAME = "project_db.sqlite";
SQLiteDatabase db;
private Context mContext=null;
static int l=1;
static String DATABASE_NAME="project_db.sqlite";
String getquestion=null;
Data(Context context)
{
super(context, DATABASE_NAME, null, l);
this.mContext=context;
}
public void createDataBase() throws IOException {
boolean mDataBaseExist = checkDataBase();
if (!mDataBaseExist) {
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException mIOException) {
mIOException.printStackTrace();
throw new Error("Error copying database");
} finally {
this.close();
}
}
}
/** This method checks whether database is exists or not **/
private boolean checkDataBase() {
try {
final String mPath = DB_PATH + DB_NAME;
db=SQLiteDatabase.openDatabase(mPath, null,SQLiteDatabase.OPEN_READONLY);
// File file = new File(mPath);
//if (file.exists())
// return true;
// else
// return false;
} catch (SQLiteException e) {
e.printStackTrace();
return false;
}
if(db!=null){
db.close();
}
return db!=null?true :false;
}
/**
* This method will copy database from /assets directory to application
* package /databases directory
**/
private void copyDataBase() throws IOException {
try {
InputStream mInputStream = mContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream mOutputStream = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = mInputStream.read(buffer)) > 0) {
mOutputStream.write(buffer, 0, length);
}
mOutputStream.flush();
mOutputStream.close();
mInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/** This method open database for operations **/
public boolean openDataBase() throws SQLException {
String mPath = DB_PATH + DB_NAME;
databaseobject = SQLiteDatabase.openDatabase(mPath, null,
SQLiteDatabase.OPEN_READWRITE);
return databaseobject!=null;
}
/** This method close database connection and released occupied memory **/
@Override
public synchronized void close() {
if (databaseobject != null)
databaseobject.close();
SQLiteDatabase.releaseMemory();
super.close();
}
@Override
public void onCreate(SQLiteDatabase arg0) {
String query="create table if not exists data (id integer primary key autoincrement, "
+ "question text , option1 text ,option2 text ,option3 text,option4 text )";
my testactivity code is
public class TestActivity extends Activity {
Data object,projectobject;
SQLiteDatabase mydatabase;
TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
object =new Data(this);
object.open();
t=(TextView) findViewById(R.id.textView1);
t.setText("Ques."+ " " + object.fetchQuestion(1));
projectobject = new Data(this);
try{
projectobject.createDataBase();
}
catch(IOException e)
{
Toast.makeText(getBaseContext(),"it not worked11"+e.getMessage(), Toast.LENGTH_SHORT ).show();
}
try{
projectobject.openDataBase();
mydatabase=projectobject.getReadableDatabase();
projectobject.close();
}
catch(Exception e){
Toast.makeText(getBaseContext(),"it not worked2222"+e.getMessage(), Toast.LENGTH_SHORT ).show();
}
object.close1();
}
but my app stops : unfortunately showing unable to fetch database. I am using icecream sandwich 4.0.4 Any help is appreciated. logcat is :
07-22 17:32:18.583: D/jdwp(21577): sendBufferedRequest : len=0x45
07-22 17:32:18.800: D/ActivityThread(21577): BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{418495f0 vishesh.goswami.ithinkk}}
07-22 17:32:19.248: D/AndroidRuntime(21577): Shutting down VM
07-22 17:32:19.249: W/dalvikvm(21577): threadid=1: thread exiting with uncaught exception (group=0x40f3d258)
07-22 17:32:19.289: E/AndroidRuntime(21577): FATAL EXCEPTION: main
07-22 17:32:19.289: E/AndroidRuntime(21577): java.lang.RuntimeException: Unable to start activity ComponentInfo{vishesh.goswami.ithinkk/vishesh.goswami.ithinkk.TestActivity}: java.lang.NullPointerException
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.ActivityThread.access$600(ActivityThread.java:134)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.os.Handler.dispatchMessage(Handler.java:99)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.os.Looper.loop(Looper.java:154)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.ActivityThread.main(ActivityThread.java:4624)
07-22 17:32:19.289: E/AndroidRuntime(21577): at java.lang.reflect.Method.invokeNative(Native Method)
07-22 17:32:19.289: E/AndroidRuntime(21577): at java.lang.reflect.Method.invoke(Method.java:511)
07-22 17:32:19.289: E/AndroidRuntime(21577): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
07-22 17:32:19.289: E/AndroidRuntime(21577): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
07-22 17:32:19.289: E/AndroidRuntime(21577): at dalvik.system.NativeStart.main(Native Method)
07-22 17:32:19.289: E/AndroidRuntime(21577): Caused by: java.lang.NullPointerException
07-22 17:32:19.289: E/AndroidRuntime(21577): at vishesh.goswami.ithinkk.Data.onCreate(Data.java:127)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:165)
07-22 17:32:19.289: E/AndroidRuntime(21577): at vishesh.goswami.ithinkk.Data.open(Data.java:149)
07-22 17:32:19.289: E/AndroidRuntime(21577): at vishesh.goswami.ithinkk.TestActivity.onCreate(TestActivity.java:22)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.Activity.performCreate(Activity.java:4479)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
07-22 17:32:19.289: E/AndroidRuntime(21577): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
07-22 17:32:19.289: E/AndroidRuntime(21577): ... 11 more