Tengo alguna clase (SomeClass.class). Quiero tener algunos métodos estáticos en él como getAllDatabaseItems, getTableItems, insertNewRecord y más.Base de datos de acceso en clase no activa
Si lo hago de esta manera
SQLiteDatabase db = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
- necesito para extender Actividad (pero todavía no se puede utilizar en los métodos estáticos) o pasar un "db" variable en cada método único (de " actividad de llamada ") que es bastante voluminosa.
¿Cuál es la solución, de manera que pueda de alguna clase llamada SomeClass.getAllDatabaseItems()?
@ MobileDev123 Así que todavía necesidad de ampliar la actividad (debido al método openOrCreateDatabase)? Si tengo esta clase (que en realidad no es una actividad, no lo utilice de esa manera)
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);");
}
Y luego llamaremos a partir de algunas de mis actividades como esta
Partner newPartner = new Partner(this);
partnersItems = newPartner.getAllItems();
I obtener un NullExceptionError en la línea 4 (Partner.class) - ¿por qué? Si uso una referencia estática en
MODE_PRIVATE => (Context.MODE_PRIVATE)
nuevamente, no está funcionando.
@Falmarri mismo con la estática, si paso en "este" argumento (de alguna clase de persona que llama) y la recibo como un argumento Contexto en mi método estático todavía no se puede crear con éxito/abrir mi base de datos (ver líneas antes)
@svbee En lo que a mi conocimiento dice que está teniendo al menos un servicio o actividad ... Se puede llamar a la clase directamente o en jerarquía de llamadas. . (es decir, 'activity -> A -> B-- ---> your Class') ... en este caso, debe pasar' context' a todas las clases. Si su clase tiene control de vista, puede obtener View.getContext(); – Prasham
@svbee Mi comprensión dice que necesita un objeto de contexto en su clase, y así es como lo hago cuando tengo ese tipo de problemas. Puede haber mejores respuestas para eso, pero hasta entonces puedes usarlo ... funciona para mí. – Prasham
Editado mi respuesta, eche un vistazo ... – Prasham