Я новичок в Android и SQLite. Я пытаюсь создать несколько таблиц в моей базе данных, где во-первых, я сохраняю данные электронной почты в базе данных, а затем через эту сохраненную электронную почту, я могу получить электронное письмо с сервера. Когда я пытаюсь сохранить эти данные электронной почты во второй таблице базы данных, он выбрасывает исключение нулевого указателя. Это происходит из-за заявления Sqlitedatabase db = this.writeabledatabase;
alwasy становится нулевым, что означает, что база данных не может получить путь. Это мой код:Несколько таблиц базы данных в SQLite
package com.elevenvalues.baig.db2listviewupdatedeleteinsert;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.sql.SQLException;
public class DbHelper extends SQLiteOpenHelper {
// table name
public static final String EMAIL_INSERT_TABLE = "EmailInsertDetail";
public static final String EMAIL_LOG = "EmailLog";
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
public static String DATABASE_NAME = "My database";
public static final String KEY_USERNAME = "username";
public static final String KEY_EMAIL = "email";
public static final String KEY_PASSWORD = "password";
public static final String KEY_SERVER = "server";
public static final String KEY_PORT = "port";
public static final String KEY_SECURITY_TYPE = "securityType";
public static final String KEY_ACTIVE_TIME = "activeTime";
public static final String KEY_ID = "id";
public static final String KEY_ROWID = "id";
public static final String KEY_FROM = "froom";
public static final String KEY_TO = "too";
public static final String KEY_MESSAGE_BODY = "messagebody";
SQLiteDatabase db;
private boolean isUpdate;
String id;
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + EMAIL_INSERT_TABLE + " (" + KEY_ID + " INTEGER PRIMARY KEY, "
+ KEY_USERNAME + " TEXT, " + KEY_EMAIL + " TEXT," + KEY_PASSWORD + " TEXT," + KEY_SERVER + " TEXT," +
KEY_PORT + " TEXT," + KEY_SECURITY_TYPE + " TEXT," + KEY_ACTIVE_TIME + " TEXT);";
String CREATE_SERVER_DATABASE = "CREATE TABLE " + EMAIL_LOG + " (" + KEY_ROWID + " INTEGER PRIMARY KEY, "
+ KEY_TO + " TEXT, " + KEY_FROM + " TEXT," + KEY_MESSAGE_BODY + " TEXT);";
db.execSQL(CREATE_SERVER_DATABASE);
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + EMAIL_INSERT_TABLE);
db.execSQL("DROP TABLE IF EXISTS " + EMAIL_LOG);
// create new tables
onCreate(db);
}
void EmailReadDataInsert(String from, String too, String messageBody) {
db=this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DbHelper.KEY_FROM, from);
cv.put(DbHelper.KEY_TO, too);
cv.put(DbHelper.KEY_MESSAGE_BODY, messageBody);
// Inserting Row
db.insert(EMAIL_LOG, null, cv);
}
/**
* save data into SQLite
*/
public void AddEmailData(String username,String email,String password,String server,String port,String securityType,
String activeTime) {
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DbHelper.KEY_USERNAME, username);
values.put(DbHelper.KEY_EMAIL, email);
values.put(DbHelper.KEY_PASSWORD, password);
values.put(DbHelper.KEY_SERVER, server);
values.put(DbHelper.KEY_PORT, port);
values.put(DbHelper.KEY_SECURITY_TYPE, securityType);
values.put(DbHelper.KEY_ACTIVE_TIME, activeTime);
if (isUpdate) {
//update database with new data
db.update(DbHelper.EMAIL_INSERT_TABLE, values, DbHelper.KEY_ID + "=" + id, null);
} else {
//insert data into database
db.insert(DbHelper.EMAIL_INSERT_TABLE, null, values);
}
//close database
db.close();
}
//---opens the database---
public DbHelper open() throws SQLException
{
db = this.getWritableDatabase();
return this;
}
//---closes the database---
public void close()
{
this.close();
}
}
Проблема возникает в этом методе, где db
становится нулевым:
void EmailReadDataInsert(String from, String too, String messageBody) {
db=this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DbHelper.KEY_FROM, from);
cv.put(DbHelper.KEY_TO, too);
cv.put(DbHelper.KEY_MESSAGE_BODY, messageBody);
// Inserting Row
db.insert(EMAIL_LOG, null, cv);
}
Как решить мою проблему? Какие-либо предложения?
Попробуйте избавиться от линии: db.close(); –