2015-02-23 3 views
1

У меня есть класс DataBaseAdapter, который в основном создает базу данных, таблицу и некоторые методы для управления данными в ней.Совместное использование базы данных между двумя действиями в Android

Похоже this-

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 доступны для меня манипуляция.

До сих пор это круто, но проблема возникает, когда я хочу получить одну и ту же базу данных для моей второй активности, чтобы вставить туда данные.

Если я использую this-

DataBaseAdapter dataBaseAdapter=new DataBaseAdapter(ActivityTwo.this); 

тогда, это означает, что я пытаюсь создать базу данных еще раз.

Просьба предложить мне, как разделить базу данных между двумя видами деятельности.

Спасибо заранее!

ответ

0

Вы можете сделать abstractBaseActivity, который может распространяться на все другие виды деятельности. Внутри BaseActivity создайте экземпляр DataBaseAdapter. Вы сможете использовать это во всех своих действиях. Вот пример: android how to create my own Activity and extend it?

Вы можете использовать BaseActivity как одно место для вещей, которые вам нужны во всех мероприятиях. Например: ProgressDialog или AlertDialog и т. Д.

1

Во-первых, ваш класс DataBaseForApp не создается. Предположим, вы хотите, чтобы это было сделано в конструкторе DataBaseAdapter.

Во-вторых, что вы хотите сделать, это несколько экземпляров класса DataBaseForApp (extends SQLiteOpenHelper). ИМХО, вам это не нужно. Вы можете создать подкласс класса Application, как это:

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

Смежные вопросы