¿Por qué no puedo usar Resources.getSystem () sin un error de tiempo de ejecución?
public class BobDatabase extends SQLiteOpenHelper{ private static final String DATABASE_NAME = "bob.db"; private static final int DATABASE_VERSION = 1; public static final String DEFAULT_PROFILE = "default_profile"; public BobDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database) { createProfileTable(database); createTimeTable(database); createEventTable(database); createLocationTable(database); } /** * Creates a table for Profile objects, executes the string create_profile_table_sql * contained within strings.xml * @param database */ public void createProfileTable(SQLiteDatabase database) { database.execSQL(Resources.getSystem().getString(R.string.create_profile_table_sql)); }}
Consigo este error
01-14 12: 20: 57.591: E / AndroidRuntime (1825): Causado por: android.content.res.Resources $ NotFoundException: String resource ID # 0x7f040003
- Actualizaciones de Android en Play Store
- SQLiteOpenHelper múltiples bases de datos en memoria
- El objeto de conexión de SQLite se filtró - Android
- Por qué necesitamos onUpgrade (); Método en la clase SQLiteOpenHelper
- Problema con SQLiteOpenHelper en android 2.X y 3.X
El código que causa el error es la única línea dentro de createProfileTable específicamente, Resources.getSystem (). GetString (R.string.create_profile_table_sql) si uso una variable de clase para contener un Contexto y hacer context.getString (R.string.create_profile_table_sql) No tengo ningún error, pero no quiero hacerlo porque quiero evitar fugas de memoria y de acuerdo a lo que sé que esto debería funcionar. ¿Alguna idea de lo que está pasando?
- Cursor finalizado sin cerrar antes () Android
- Ejemplo de Android SQLite
- Android no actualiza la base de datos SQLite
- SQLiteOpenHelper - ¿Cómo se crea la base de datos?
- Confundido sobre CursorLoaders y usarlos con un SQLiteOpenHelper personalizado
- ¿Es realmente necesario crear tablas SQLite cada vez que se inicia la aplicación?
- Confuso respecto a SQLiteOpenHelper y crear varias tablas
- Insertar datos JSON en la base de datos SQLite en android
Según la documentación de Android, Resources.getSystem()
sólo proporciona recursos de nivel de sistema, no de nivel de aplicación (como los recursos dentro del archivo strings.xml).
http://developer.android.com/reference/android/content/res/Resources.html#getSystem ()
Trate de usar el contexto de la aplicación si realmente desea recuperar sus cadenas de esta manera, o tomar mi sugerencia en el comentario a su pregunta.
Usando Resources.getSystem (). GetWhatEver () sólo puede acceder a recursos de todo el sistema (se obtiene el error porque no hay recurso de todo el sistema con su ID). Dado que el ID de recursos no es único entre las aplicaciones, debe proporcionar la aplicación al acceder a un recurso. En Android esto se hace usando Contexto. Así que si quieres acceder a algún recurso tienes que usarlo así
context.getResource().getString(myID);
Aparte de que el comentario de Brandon es correcto.
Usted podría obtener el parámetro de contexto en la función por parámetro, o por una variable estática, o por la función getApplicationContext()
.