我正在尝试使用共享首选项,当我点击按钮bAddList时出现NullPointerException错误。
这是我的MainActivity类(项目中唯一的类)
package com.teamvdb.checklist;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity{
static String filename;
SharedPreferences.Editor editor;
SharedPreferences someData;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
filename ="checkLists";
Button bAddList = (Button) findViewById(R.id.bAddList);
final EditText etNewListName = (EditText) findViewById(R.id.etListName);
final TextView tvResults = (TextView) findViewById(R.id.result);
bAddList.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String stringData = etNewListName.getText().toString();
SharedPreferences.Editor editor = someData.edit();
editor.putString("sharedString", stringData);
editor.commit();
someData = getSharedPreferences(filename,0);
String dataReturned = someData.getString("SharedString", "Unable to Load Data");
tvResults.setText(dataReturned);
}
});
}
}
logcat的
12-12 20:50:37.818: W/dalvikvm(32683): threadid=1: thread exiting with uncaught exception (group=0x41812da0)
12-12 20:50:37.818: E/AndroidRuntime(32683): FATAL EXCEPTION: main
12-12 20:50:37.818: E/AndroidRuntime(32683): Process: com.teamvdb.checklist, PID: 32683
12-12 20:50:37.818: E/AndroidRuntime(32683): java.lang.NullPointerException
12-12 20:50:37.818: E/AndroidRuntime(32683): at com.teamvdb.checklist.MainActivity$1.onClick(MainActivity.java:32)
12-12 20:50:37.818: E/AndroidRuntime(32683): at android.view.View.performClick(View.java:4637)
12-12 20:50:37.818: E/AndroidRuntime(32683): at android.view.View$PerformClick.run(View.java:19422)
12-12 20:50:37.818: E/AndroidRuntime(32683): at android.os.Handler.handleCallback(Handler.java:733)
12-12 20:50:37.818: E/AndroidRuntime(32683): at android.os.Handler.dispatchMessage(Handler.java:95)
12-12 20:50:37.818: E/AndroidRuntime(32683): at android.os.Looper.loop(Looper.java:136)
12-12 20:50:37.818: E/AndroidRuntime(32683): at android.app.ActivityThread.main(ActivityThread.java:5586)
12-12 20:50:37.818: E/AndroidRuntime(32683): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 20:50:37.818: E/AndroidRuntime(32683): at java.lang.reflect.Method.invoke(Method.java:515)
12-12 20:50:37.818: E/AndroidRuntime(32683): at com.android.internal.os.ZygoteInit$MethodAndArgsC
答案 0 :(得分:1)
在使用之前初始化someData。
这应该是onClick方法中的代码:
String stringData = etNewListName.getText().toString();
someData = getSharedPreferences(filename,0);
SharedPreferences.Editor editor = someData.edit();
editor.putString("sharedString", stringData);
editor.commit();
String dataReturned = someData.getString("SharedString", "Unable to Load Data");
tvResults.setText(dataReturned);
SET操作:
Set<String> set = new HashSet<String> ();
for (String s : set) {
//do operations on string s
}
答案 1 :(得分:1)
您的问题与此行有关:
SharedPreferences.Editor editor = someData.edit();
someData
被声明为类成员但从未初始化。尝试访问它会导致NullPointerException