2012-06-11 2 views
0

je sais encore vraiment toute cette chose de contexte, nous avons trouvé beaucoup de programmation Android. donc j'ai essayé de créer une fonction d'abandonner toutes mes tables, et voici un mon code partiel:passant le contexte de non-activité

public class DBAdapter { 
     private static class DbHelper extends SQLiteOpenHelper { 
     private boolean databaseCreated = false; 
     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     public void deleteTables(){ 
     Log.d("DBAdapter","dlm drop tables pre"); 
     this.sqlDatabase.execSQL("DROP TABLE IF EXISTS ["+TABLE_TV+"];"); 
     this.sqlDatabase.execSQL("DROP TABLE IF EXISTS ["+TABLE_CAMERA+"];"); 
     this.sqlDatabase.execSQL("DROP TABLE IF EXISTS ["+TABLE_GPS+"];"); 
     } 
} 
} 

et la partie où je vais appeler la fonction deleteTables

public class UpdateDatabase { 
    public void updateTable(String table,JSONObject jsonObject){ 
    DBAdapter db = new DBAdapter(this); 
     db.deleteTables(); 
    } 
} 

mais bien sûr il retournera une erreur, puisque DBAdapter attend un contexte. La classe publique UpdateDatabase n'est pas une classe d'activité. Appeler DbAdapter db = new DBAdapter (this) de la classe d'activité fonctionnera juste find. Alors, comment puis-je trouver une solution à ce problème?

grâce

+0

'updateTable' est une méthode _static, il n'a pas' this' –

+0

ok j'ai corrigé cela et enlevé static de updateTable, mais quand même, comment puis-je passer le contexte à DBAdapter d'ici? – imin

Répondre

2

Vous pouvez ajouter un constructeur à UpdateDatabase qui prend un Context et le stocke pour qu'il soit disponible pour être utilisé par updateTable. Quelque chose comme ceci:

public class UpdateDatabase { 
    private final Context mContext; 

    public UpdateDatabase(Context context){ 
     mContext = context; 
    } 

    public void updateTable(String table,JSONObject jsonObject){ 
     DBAdapter db = new DBAdapter(mContext); 
     db.deleteTables(); 
    } 
} 

Maintenant, chaque fois que vous faites new UpdateDatabase() vous devrez faire new UpdateDatabase(..context..) à la place. Si vous faites cela à partir d'un Activity, alors vous pouvez faire new UpdateDatabase(this).

0

salut regarder ce code ..

public class DbManager 
{ 
// the Activity or Application that is creating an object from this class. 
Context context; 
CustomSQLiteOpenHelper helper; 
// a reference to the database used by this application/object 
protected SQLiteDatabase db; 
private static DbManager INSTANCE; 
// These constants are specific to the database. 
protected final String DB_NAME = "yourDB"; 
protected final int DB_VERSION = 1; 



public DbManager(Context context) 
{ 
    this.context = context; 
    // create or open the database 
    helper = new CustomSQLiteOpenHelper(context); 
    this.db = helper.getWritableDatabase(); 
} 
public static DbManager getInstance(Context context){ 
    if(INSTANCE == null)INSTANCE = new DbManager(context); 
    return INSTANCE; 
    } 
public void db_Close() 
{ 
    if(helper!=null){ 
     helper.close(); 
    } 
    this.db.close(); 
} 



private class CustomSQLiteOpenHelper extends SQLiteOpenHelper 
{ 

    public CustomSQLiteOpenHelper(Context context) 
    { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     // This string is used to create the database. 
     // execute the query string to the database. 
     //db.execSQL(newTableQueryString); 
     Log.i("DataBaseManager", "Create Table"); 
    } 


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     // NOTHING TO DO HERE. THIS IS THE ORIGINAL DATABASE VERSION. 
     // OTHERWISE, YOU WOULD SPECIFIY HOW TO UPGRADE THE DATABASE. 
    } 

} 
} 

// Inherit the DbManager Class 
public class DataCollection extends DbManager { 

public DataCollection(Context context){ 
     super(context); 
} 
    public void deleteTable(String TABLE_NAME){ 
    try {db.execSQL("DROP TABLE "+TABLE_NAME);}//.delete(TABLE_NAME, null, null);} 
    catch (Exception e){ 
     Log.e("DB ERROR", e.toString()); 
     e.printStackTrace(); 
    } 
}