单击按钮时出现Android NullPointerException

时间:2014-12-12 09:58:51

标签: java android

我正在尝试使用共享首选项,当我点击按钮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

2 个答案:

答案 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