Ho una classe (SomeClass.class). Voglio avere alcuni metodi statici come getAllDatabaseItems, getTableItems, insertNewRecord e così via.Accesso al database nella classe di non attività
Se lo faccio in questo modo
SQLiteDatabase db = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
- ho bisogno di estendere attività (ma ancora non è possibile utilizzarlo in metodi statici) oppure passare un "db" variabile in ogni singolo metodo (da " attività chiamante ") che è piuttosto ingombrante.
Qual è la soluzione in modo che posso da alcuni chiamano classe SomeClass.getAllDatabaseItems()?
@ MobileDev123 Così ho ancora bisogno di estendere attività (a causa del metodo openOrCreateDatabase)? Se ho questa classe (che in realtà non è un'attività, non utilizzare in questo modo)
public class Partner extends Activity {
@SuppressWarnings("static-access")
public Partner(Context mContext) {
myContext = mContext;
db = openOrCreateDatabase(DATABASE_NAME, myContext.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS " + PARTNER_TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " VARCHAR);");
db.execSQL("CREATE TABLE IF NOT EXISTS " + ADDRESS_TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " + PARTNER_ID + " INT, " + ADDRESS + " VARCHAR, " + CITY + " VARCHAR);");
}
E poi chiamare da alcuni dei miei attività come questo
Partner newPartner = new Partner(this);
partnersItems = newPartner.getAllItems();
I ottieni un NullExceptionError sulla linea 4 (Partner.class) - perché? Se utilizzo il riferimento statico su
MODE_PRIVATE => (Context.MODE_PRIVATE)
di nuovo non funziona.
@Falmarri stesso con statico, se passo l'argomento "questo" (da qualche classe chiamante) e lo ricevo come argomento di contesto nel mio metodo statico non riesco ancora a creare/aprire il mio database (vedere le righe prima)
@svbee Per quanto riguarda la mia conoscenza dice che stanno avendo atleast un servizio o attività ... Si può chiamare direttamente o in gerarchia di richiamo la vostra classe. . (cioè 'attività -> A -> B-- ---> la tua classe') ... in questo caso devi passare' context' a tutte le classi. Se la tua classe ha un controllo di visualizzazione, puoi ottenere View.getContext(); – Prasham
@svbee la mia comprensione dice che hai bisogno di un oggetto di contesto nella tua classe, e questo è come faccio quando ho questo tipo di problemi. Forse ci sono risposte migliori per questo, ma fino ad allora puoi usarlo ... funziona per me. – Prasham
Modificato la mia risposta, dai uno sguardo ... – Prasham