2013-07-13

讀取資源檔時產生NullPointerException

原本想把專案中各class的TAG還有常數統一整理成資源檔,讓整個架構更有層次感,像是這樣:
public class Main extends Activity{
    final private static String TAG = getString(R.string.tag_main);
    ..........
    ..........
但在修改之後卻連onCreate都進不去就掛了。

研究了好幾個小時才了解,原來getString這個function實際上是Context.getResouce().getString(),也就是說在Activity 初始化之前(super.onCreate),"基本上"是不可以調用getString來取得資源檔的字串,當然是有些取得的方法啦,參考的是這篇:

http://stackoverflow.com/questions/6261990/strange-nullpointerexception

基本上就是要先建立一個Activity extends Application作為接口,然後在Main取得資源檔前先調用這個class,大致上步驟如下:
(1)在AndroidManiifest.xml中新增一個application:
<manifest ...>
    ...
    <application  android:name="com.mypackage.MyApplication" ... >
       ...
    </application>
    ...

</manifest>

(2)建立對應的MyApplication.java,並且把getString寫入:
public class MyApplication extends Application
{
    private static MyApplication s_instance;

    public MyApplication ()
    {
        s_instance = this;
    }

    public static Context getContext()
    {
        return s_instance;
    }

    public static String getString(int resId)
    {
        return getContext().getString(resId);    
    }

}

(3)從原Main中調用MyApplication.getString方法:
private final String TAG = MyApplication.getString(R.string.tag_main);
看到這邊,我決定....直接把TAG hardhoding在上面了(死).....

沒有留言:

張貼留言