마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ADV로 돌리는데 계속해서 has stopped 오류가 발생해요..

0 추천

안녕하세요.. 초보 개발자입니다.. 회원가입 구현을 만들고있는데

계속 xxx has stopped 오류가 발생하네요..

logcat에 빨간색? 은 없고..

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.content.SharedPreferences.getBoolean(java.lang.String, boolean)' on a null object reference at com.example.user.testsest.MainActivity.onCreate(MainActivity.java:30)

이부분 때문에 오류가 발생하는것 같은데..

public class MainActivity extends AppCompatActivity {

    EditText idInput, passwordInput;
    CheckBox autoLogin;
    Boolean loginChecked;
    SharedPreferences pref;
    SharedPreferences.Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        idInput = (EditText) findViewById(R.id.emailInput);
        passwordInput = (EditText) findViewById(R.id.passwordInput);
        autoLogin = (CheckBox) findViewById(R.id.checkBox);


        // if autoLogin checked, get input

        if (pref.getBoolean("autoLogin", false)) {
            idInput.setText(pref.getString("id", ""));
            passwordInput.setText(pref.getString("pw", ""));
            autoLogin.setChecked(true);
            // goto mainActivity

        } else {

            // if autoLogin unChecked
            String id = idInput.getText().toString();
            String password = passwordInput.getText().toString();
            Boolean validation = loginValidation(id, password);

            if (validation) {
                Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_LONG).show();
                // save id, password to Database

                if (loginChecked) {
                    // if autoLogin Checked, save values
                    editor.putString("id", id);
                    editor.putString("pw", password);
                    editor.putBoolean("autoLogin", true);
                    editor.commit();
                }
                // goto mainActivity


            } else {

                Toast.makeText(MainActivity.this, "Login Failed", Toast.LENGTH_LONG).show();
                // goto LoginActivity
            }
        }

        // set checkBoxListener
        autoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    loginChecked = true;
                } else {
                    // if unChecked, removeAll
                    loginChecked = false;
                    editor.clear();
                    editor.commit();
                }
            }
        });
    }


    private boolean loginValidation(String id, String password) {
        if (pref.getString("id", "").equals(id) && pref.getString("pw", "").equals(password)) {
            // login success
            return true;
        } else if (pref.getString("id", "").equals(null)) {
            // sign in first
            Toast.makeText(MainActivity.this, "Please Sign in first", Toast.LENGTH_LONG).show();
            return false;
        } else {
            // login failed
            return false;
        }
    }
}

if (pref.getBoolean("autoLogin", false)) {

이부분이 30번째 라인인데... 대체 무엇이 문제인지 모르겠네요..

익명사용자 님이 2017년 5월 29일 질문

1개의 답변

0 추천
pref 값이 null 이라는 의미입니다.

pref = getSharedPreferences(FILE_NAME, Activity.MODE_PRIVATE); 같은게 앞에 호출하여

pref가 null이 아니게 수정하세요
익명사용자 님이 2017년 5월 30일 답변
...