获取字符串资源会抛出NullPointerException

时间:2012-10-14 13:32:03

标签: java android nullpointerexception resources android-context

我的日历中有特定日期的事件列表。

public ArrayList<Event> eventDetails(int m, int d) {

   ArrayList<Event> events = new ArrayList<Event>();
        switch (m) {
           case 1:
                if (d == 1) {
                    events.add(new Event("Event in Date 1", null, null, null, null, null, null, null));
                }
        }

        return events
}

我想将硬编码文本转换为我所做的字符串资源:

此:

events.add(new Event("Event in Date 1", null, null, null, null, null, null, null));

要:

events.add(new Event(getResources().getString(R.string.text1), null, null, null, null, null, null, null));

然而,问题是我在getResources().getString(R.string.text1)得到了NullPointerException。

我意识到我必须传递上下文来获取String资源,所以:

_context.getResources().getString(R.string.text1)

但是,这仍然引发了NullPointerException。我宣布Context是静态的,但它不起作用。

代码有什么问题?

代码:

public class CalendarEvents extends Activity   {
    private static Context _context;

     /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.events);     
        _context = this.getApplicationContext();

    }


    public ArrayList<Event> eventDetails(int m, int d) {

       ArrayList<Event> events = new ArrayList<Event>();
            switch (m) {
               case 1:
                    if (d == 1) {
                        events.add(new Event(_context.getResources().getString(R.string.text1), null, null, null, null, null, null, null));
                    }
            }

            return events
    }

}

3 个答案:

答案 0 :(得分:0)

1)您错过了()中的getResources

2)您是否在资源中定义了R.string.text1? (例如res/values/strings.xml

答案 1 :(得分:0)

试试这个......

String mystring = getResources().getString(R.string.mystring);

getResources()Context类的方法。如果您位于活动或服务(扩展上下文)中,则可以像在此片段中一样使用它。

答案 2 :(得分:0)

我解决了。我在方法中添加了Context参数,然后使用参数

访问资源
 public ArrayList<Event> eventDetails(Context mContext, int m, int d) {

 ArrayList<Event> events = new ArrayList<Event>();
            switch (m) {
               case 1:
                    if (d == 1) {
                        events.add(new Event(mContext.getResources().getString(R.string.text1), null, null, null, null, null, null, null));
                    }
            }

            return events
}