Pregunta

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));
}}

Entiendo este error

01-14 12: 20: 57.591: E/Androidruntime (1825): causado por: android.content.res.resources $ NotFoundException: String Resource ID #0x7F040003

El código que causa el error es la línea única dentro de CreateProfiletable específicamente, Recursos.getSystem (). GetString (r.string.create_profile_table_sql) Si uso una variable de clase para mantener un contexto y hago context.getString (r.string.create_profile_table_sql) No recibo ningún error, pero no quiero hacer eso porque quiero evitar fugas de memoria y de acuerdo con lo que sé que esto debería funcionar. ¿Alguna idea de lo que está pasando?

¿Fue útil?

Solución

Según la documentación de Android, Resources.getSystem() Solo proporciona recursos a nivel de sistema, no a nivel de aplicación (como los recursos dentro de su archivo Strings.xml).

http://developer.android.com/reference/android/content/res/resources.html#getsystem ()

Intente usar el contexto de la aplicación si realmente desea recuperar sus cuerdas de esta manera, o tome mi sugerencia en el comentario a su pregunta.

Otros consejos

Uso de recursos.getSystem (). Getwhuse () Solo puede acceder a los recursos de todo el sistema (obtiene el error porque no hay recursos en todo el sistema con su ID). Dado que la ID de recursos no es única en todas las aplicaciones, necesita proporcionar la aplicación al acceder a un recurso. En Android esto se hace usando el contexto. Entonces, si desea acceder a algunos recursos, necesita usarlo así

context.getResources().getString(myID);

Aparte de eso, el comentario de Brandon es correcto.

Puede obtener el contexto de parámetro en la función por parámetro, o por una variable estática, o por getApplicationContext() función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top