为什么我不能使用Resources.getSystem()没有运行时错误? [英] Why can't I use Resources.getSystem() without a Runtime error?

查看:954
本文介绍了为什么我不能使用Resources.getSystem()没有运行时错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

公开类BobDatabase扩展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数据库)
{
createProfileTable(database);
createTimeTable(database);
createEventTable(database);
createLocationTable(database);
}

/ **
*为Profile对象创建一个表,执行string.xml中包含的字符串create_profile_table_sql
*
* @param数据库
* /
public void createProfileTable(SQLiteDatabase database)
{
database.execSQL(Resources.getSystem()。getString(R.string.create_profile_table_sql));
}}

我收到这个错误



/ p> 01-14 12:20:57.591:E / AndroidRuntime(1825) b
$ b

导致错误的代码是createProfileTable中的单行,具体如下: Resources.getSystem()。getString(R.string.create_profile_table_sql)如果我使用类变量保存一个上下文并执行 context.getString(R.string.create_profile_table_sql)我没有收到任何错误,但我不想这样做,因为我想避免内存泄漏,根据我知道这应该工作。任何想法发生了什么?

解决方案

根据Android文档, Resources.getSystem()仅提供系统级资源,而不是应用级资源(如strings.xml文件中的资源)。



http://developer.android.com/reference/android/content/res/Resources.html #getSystem()



如果您真的想通过这种方式检索您的字符串,或者在您的问题的评论中提出我的建议,请尝试使用应用程序的上下文。


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

I get this error

01-14 12:20:57.591: E/AndroidRuntime(1825): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f040003

The code that causes the error is the single line inside createProfileTable specifically, Resources.getSystem().getString(R.string.create_profile_table_sql) if I use a class variable to hold a Context and do context.getString(R.string.create_profile_table_sql) I don't get any errors but I don't want to do that because I want to avoid memory leaks and according to what I know this should work. Any idea what's happening?

解决方案

According to Android documentation, Resources.getSystem() only provides system-level resources, not application-level ones (like the resources inside your strings.xml file).

http://developer.android.com/reference/android/content/res/Resources.html#getSystem()

Try using the application's context if you really want to retrieve your strings this way, or take my suggestion in the comment to your question.

这篇关于为什么我不能使用Resources.getSystem()没有运行时错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆