2012-02-17 17 views
1

工作在android hello世界中,我接下來向strings.xml資源文件添加了一些字符串。然後,我想我的主要活動類的成員變量設置爲字符串之一的值:Android資源作爲主要活動中的成員變量

public class MyActivity extends Activity { 
    /** Called when the activity is first created. */ 
    public String myString = getString(R.string.MY_STRING); // compiles, but crashes 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView tv = new TextView(this); 
    tv.setText(myString); 
    setContentView(tv); 
    }  
} 

當它崩潰,我得到這個在logcat中: 無法實例活動ComponentInfo {} com.myclass :java.lang.NullPointerException

那麼,我做錯了,還是這種預期的行爲?查看文檔, 我沒有看到任何讓我認爲資源在主要活動構建時不可用的東西。

http://developer.android.com/guide/topics/resources/accessing-resources.html

不過,我敢肯定,這將在其他類的工作 - 只要不是主要的活動課。

+0

@Richard Green,我認爲你是對的。想知道,如果我在OnResume()中分配它會更好嗎? – MrGibbage 2012-02-17 17:21:05

回答

1

我不認爲你可以在Activity類上調用getString,因爲它可能還沒有被正確初始化。您可能需要拆分聲明(將其保留爲公共字符串),然後分配(將其移至onCreate)。

public class MyActivity extends Activity { 
     /** Called when the activity is first created. */ 
     public String myString; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     myString = getString(R.string.MY_STRING); // compiles, but crashes 
     TextView tv = new TextView(this); 
     tv.setText(myString); 
     setContentView(tv); 
     }  
    }