代码之家  ›  专栏  ›  技术社区  ›  Alex.Marynovskyi

为什么使用getResources()。getString()是否返回null?

  •  0
  • Alex.Marynovskyi  · 技术社区  · 9 年前

    我总是得到 NullPointerException 每当我打电话:

    getApplicationContext().getResources().getStringArray(R.array.days);
    

    我是从 DialogFragment 在我的 Activity 。我也尝试过使用 getActivity() 但这对我也不起作用。有人知道这个问题吗?

    3 回复  |  直到 9 年前
        1
  •  7
  •   Hussein El Feky    9 年前

    试试看:

    如果您将其写入片段:

    String[] days = getActivity().getResources().getStringArray(R.array.days);
    

    如果您在活动中写入此内容:

    String[] days = this.getResources().getStringArray(R.array.days);
    
        2
  •  2
  •   Hussein El Feky    9 年前

    这只是一个假设,但大多数情况下,如果有人遇到这个错误,他们就会在代码的位置或调用代码时出错。例如,如果在onCreate()之前调用它:

    public class YourActivity extends Activity {
    
    private String foo = "foo";
    private String[] yourArray = getResources().getStringArray(R.array.yourArray);
    
        public void onCreate(Bundle savedInstanceState){
            ...
        }
    }
    

    这将导致NullPointerException。相反,你必须这样称呼它:

    public class YourActivity extends Activity {
    
    private String foo = "foo";
    private String[] yourArray;
    
        public void onCreate(Bundle savedInstanceState) {
            setContentView(R.layout.yourLayout);
            yourArray = getResources().getStringArray(R.array.yourArray);
        }
    }
    
        3
  •  1
  •   Rajesh Jadav    9 年前

    试试这个。

    public class YourActivity extends Activity{
    Context mContext;
    
    public void onCreate(Bundle savedInstanceState){
           setContentView(R.layout.yourLayout);   
           mContext = this;                  
    }
    
    class DialogFragment{
     String[] days = mContext.getResources().getStringArray(R.array.days);
    ...............
      }
    }
    

    我希望这有帮助!