2015-02-23 141 views
1

我有一个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); 

那么,就意味着我将尝试再次创建数据库。

请建议我如何在两个活动之间共享数据库。

在此先感谢!

回答

0

您可以制作所有其他活动都可以扩展的abstractBaseActivity。在BaseActivity内部创建一个DataBaseAdapter的实例。你可以在你的所有活动中使用它。以下是一个示例:android how to create my own Activity and extend it?

您可以使用BaseActivity作为您在所有活动中需要的东西的单个位置。例如:ProgressDialogAlertDialog

1

首先,您的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"> 
+0

是的,这是这样的 – kgandroid 2016-10-05 07:21:02