现在我正试图以这种方式将一个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。
答案 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...)