在Android中的两个活动之间共享数据库
问题描述:
我有一个DataBaseAdapter类,它基本上创建数据库,表和一些方法来操作其中的数据。在Android中的两个活动之间共享数据库
它看起来像这 -
import ...
public class DataBaseAdapter {
DataBaseForApp dataBaseForApp;
//Constructor for DataBaseAdapter
public DataBaseAdapter(Context context) {
}
//insert data
public long insertData(String player_name,int enrollmentno)
{
SQLiteDatabase SQLiteDB=dataBaseForApp.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(dataBaseForApp.NAME,player_name);
contentValues.put(dataBaseForApp.ENROL,enrollmentno);
long id=SQLiteDB.insert(dataBaseForApp.DATABASE_TABLE,null,contentValues);
SQLiteDB.close();
return id;
}
//search for a player name and the square grid size
public boolean search(String player_name, int enrollmentno)
{
SQLiteDatabase SQLiteDB=dataBaseForApp.getWritableDatabase();
String[] columns={dataBaseForApp.NAME,dataBaseForApp.ENROL};
String[] arguments={player_name,Integer.toString(enrollmentno)};
Cursor cursor=SQLiteDB.query(dataBaseForApp.DATABASE_TABLE,columns,null,null,null,null,null);
while(cursor.moveToNext())
{
int index1=cursor.getColumnIndex(dataBaseForApp.NAME);
int index2=cursor.getColumnIndex(dataBaseForApp.ENROL);
String name=cursor.getString(index1);
int gsize=cursor.getInt(index2);
if(name.equals(player_name)&&gsize==enrollmentno)
{
return true;
}
}
SQLiteDB.close();
return false;
}
// main class
static class DataBaseForApp extends SQLiteOpenHelper{
private static final String DATABASE_NAME="SQLiteDB_FOR_APP";
private static final String DATABASE_TABLE="INFO";
private static final int DATABASE_VERSION=1;
private static final String NAME="NAME";
private static final String ENROL="ENROL";
private static final String CREATE_TABLE="CREATE TABLE "+DATABASE_TABLE+"("+NAME+" VARCHAR(100), "+ENROL+" INT)";
private static final String DROP_TABLE="DROP TABLE IF EXISTS "+DATABASE_TABLE;
public DataBaseForApp(Context context) {
super(context,DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase SQLiteDB) {
try {
SQLiteDB.execSQL(CREATE_TABLE);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase SQLiteDB, int oldVersion, int newVersion) {
try {
SQLiteDB.execSQL(DROP_TABLE);
onCreate(SQLiteDB);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
然后我做这在我的第一个活动 -
DataBaseAdapter dataBaseAdapter=new DataBaseAdapter(ActivityOne.this);
在此之后,数据库已经建立并在DataBaseAdapter的方法可用于我操纵。
到目前为止,它很酷,但是当我想为我的第二个活动获取相同的数据库以从中插入数据时会出现问题。
如果我用这个 -
DataBaseAdapter dataBaseAdapter=new DataBaseAdapter(ActivityTwo.this);
那么,就意味着我将尝试再次创建数据库。
请建议我如何在两个活动之间共享数据库。
在此先感谢!
答
您可以制作所有其他活动都可以扩展的abstract
BaseActivity
。在BaseActivity
内部创建一个DataBaseAdapter
的实例。你可以在你的所有活动中使用它。以下是一个示例:android how to create my own Activity and extend it?
您可以使用BaseActivity
作为您在所有活动中需要的东西的单个位置。例如:ProgressDialog
或AlertDialog
等
答
首先,您的DataBaseForApp
类永远不会实例化。我假设你想在DataBaseAdapter
的构造函数中完成这个工作。
其次,你想要做的是有多个DataBaseForApp
(扩展SQLiteOpenHelper
)类的实例。恕我直言,你不需要这个。你可以继承应用程序类是这样的:
public class MyApplication extends Application {
private static DataBaseAdapter dbAdapter;
public static SQLiteDatabase getDbAdapter() {
return dbAdapter;
}
@Override
public void onCreate() {
super.onCreate();
dbAdapter = new DataBaseAdapter(getApplicationContext());
}
}
而在你的manifest.xml文件:
<application
android:name=".MyApplication">
是的,这是这样的 – kgandroid 2016-10-05 07:21:02