2014-12-02 69 views
-1

在我问之前,我已经看过this post,并尝试了所有建议都无济于事。我的问题是,我可以轻松设置使用如何从使用Android SDK的Java的string.xml中获取字符串?

getResources().getString(R.string.example) 

的onCreate方法中的字符串,但我想设置使用相同的getResources()方法的公共静态最终的String string.xml值。但是,当我这样做时,我得到一个“无法从类型ContextThemeWrapper”的非静态方法getResources()的静态引用“。所以,我想实例ContextThemeWrapper也

this.getResources().getString(R.string.example) 

这既清除错误,但两者的碰撞与一个NullPointerException。任何简单地从资源设置一个字符串的解决方案将不胜感激。

到目前为止,我有这样的:

public class MainActivity extends Activity { 

    ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(); 
    public final String CYPHER = contextThemeWrapper.getResources().getString(R.string.cypher_txt); 
    public static final int LAYERS = 7; 
    public static final int FLIP = 3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String appName = getResources().getString(R.string.app_name); 
     Toast.makeText(this, "Welcome to " + appName, Toast.LENGTH_SHORT).show(); 

    } 

回答

1

你需要的是一个静态的上下文对象。为此,您可以使用应用程序上下文。

假设你的应用程序清单如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="my.app.package" ... 

     <application android:name=".MyApp" ... 

1)与公共静态方法返回此背景下创建一个应用程序类。

package my.app.package; // This should match the package path in your Manifest 

public class MyApp extends android.app.Application { // This should match the app name in your manifest 

    private static MyApp appContext; 

    public MyApp() { appContext = this; } 

    public static Context getAppContext() { return appContext; } 

} 

2)然后在你的活动,可以使静态获取的背景和解决资源:

public final String CYPHER = MyApp.getContext().getResources.getString(R.string.cypher_txt); 
+0

@TheFreddyKilo - 这是否对你的工作? – EJK 2014-12-02 03:08:49

+0

应该是'MyApp extends Application',唯一不起作用的是在字符串有多个语言版本时切换设备区域设置,因为它只加载一次,但从不更新。 – zapl 2014-12-02 03:31:12

+0

那么这种方法是否解决了您原先提出的问题?处理多种语言是一个不同的问题,这不是你的问题。 – EJK 2014-12-02 04:03:31

相关问题