在类之间传递变量时出现NullPointerException

时间:2015-03-18 23:51:41

标签: java android nullpointerexception

MainActivity.java

现在我正试图以这种方式将一个String从一个类转移到另一个:

//seting it public
public String grid_columns;



sp = getSharedPreferences(PREFS_NAME,0);

//getting the String from a shared preference file
//ignore that its a number, in the file its considering a string
        this.grid_columns = sp.getString("grid_columns", "3");
        Log.i("TAG",grid_columns);
        //menes.setGrid_columns(grid_columns);

现在在另一个类中,我需要获取此字符串并将其记录下来进行测试。 AdapterListView.java http://pastebin.com/NxfHjXjv

//getting the String from the other activity
MainActivity main = new MainActivity();
        String grid_columnsA = main.grid_columns;

        if(convertView == null){

            convertView = inflater.inflate(R.layout.item_list, null);
            Log.i("TAG",grid_columnsA);
//NullPointerException in this line (Log.i...)

我做错了什么?有人可以帮帮我吗? 我已经尝试过getter和setter以及NullPointerException。

2 个答案:

答案 0 :(得分:1)

在创建活动的新实例时,不会调用

onCreate()。如果需要将数据从活动传递到另一个活动,则可以使用密钥将数据存储在intent中,并使用密钥检索该值。

如果您确实需要以不同于使用意图的方式访问某些变量,您可以将Activity的引用作为参数发送,并读取公共字段或调用getter方法。

最重要的是onCreate()不是构造函数,并且是Activity生命周期的一部分,它仅在活动启动时在运行时调用,而不是在启动时调用。

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

    this.grid_columns = sp.getString("grid_columns", "3");
}

您正在onCreate()方法上启动字符串。这就是为什么

    MainActivity main = new MainActivity();
    String grid_columnsA = main.grid_columns;

返回空指针异常,因为创建MainActivity的新实例不会调用onCreate()

您可以做的是在创建AdapterListView时将String作为参数发送并在公共构造函数中传递字符串,

或者在AdapterListView中设置setGridColumns(String s)方法,

mylist.setAdapter(new AdapterListView(MainActivity.this, names, mImageLoader));

而不是这样做,保存在此行中创建的AdapterListView的引用,调用setter方法,然后调用setAdapater()方法。

您可以选择的最终方法是在Context的构造函数中将活动作为AdapterListView对象传递。将其转换为MainActivity并在构造函数中访问grid_columns。虽然这不安全,因为Context可能并不总是MainActivity,如果这是您使用此对象的唯一情况,它将正常工作。

答案 1 :(得分:0)

这是错误的

//getting the String from the other activity
    MainActivity main = new MainActivity();
    String grid_columnsA = main.grid_columns;

    if(convertView == null){
        convertView = inflater.inflate(R.layout.item_list, null);
        Log.i("TAG",grid_columnsA);
//NullPointerException in this line (Log.i...)

应该是

//getting the String from the other activity
    SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
    String grid_columnsA = prefs.getString("grid_columns", "3");

    if(convertView == null){
        convertView = inflater.inflate(R.layout.item_list, null);
        Log.i("TAG",grid_columnsA);
//NullPointerException in this line (Log.i...)