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

SharedPreferences가 먹히질 않는 것 같습니다 ㅠㅠ

0 추천

로그인 처리하는 클래스를 만들어보았는데요 자동로그인 체크박스가 체크되어있으면 SharedPreferences에 아이디랑 비밀번호를 넣어놨다가 다음번엔 바로 꺼내서 로그인되게끔 만들어보려고했는데 이상하게 저장 자체가 되지 않는것 같아요 ㅜㅜ 왜그런지 한번 봐주시면 감사하겠습니다

E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_dependencies_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_0_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_1_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_2_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_3_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_4_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_5_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_6_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_7_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_8_apk.apk@classes.dex: Permission denied
E/dex2oat: Failed to create oat file: /data/dalvik-cache/arm/data@app@com.bpg.efes-1@split_lib_slice_9_apk.apk@classes.dex: Permission denied

public class LoginActivity extends AppCompatActivity {

    private AlertDialog dialog;
    boolean loginChecked;

    private void savePreferences(String ID, String PW){
        SharedPreferences mPref = getSharedPreferences("mPref",MODE_PRIVATE);
        SharedPreferences.Editor editor = mPref.edit();
        editor.putBoolean("ALogin",true);
        editor.putString("userID",ID);
        editor.putString("userPW",PW);
        editor.apply();
    }
    private boolean getAutoPreferences(){
        SharedPreferences mPref = getSharedPreferences("mPref",MODE_PRIVATE);
        return mPref.getBoolean("Alogin",false);
    }
    private String getIDPreferences(){
        SharedPreferences mPref = getSharedPreferences("mPref",MODE_PRIVATE);
        return mPref.getString("userID","");
    }
    private String getPWPreferences(){
        SharedPreferences mPref = getSharedPreferences("mPref",MODE_PRIVATE);
        return mPref.getString("userPW","");
    }

    public void isAutoLoginChecked(){
        CheckBox autoLogin = (CheckBox) findViewById(R.id.autoButton);
        autoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked) {
                    loginChecked = true;
                }
                else{
                    loginChecked = false;
                }
            }
        });
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        TextView registerButton = (TextView) findViewById(R.id.registerButton);
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
                LoginActivity.this.startActivity(registerIntent);
            }
        });

        final EditText idText =  (EditText) findViewById(R.id.idText);
        final EditText passwordText =  (EditText) findViewById(R.id.passwordText);
        final Button loginButton = (Button) findViewById(R.id.loginButton);

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String userID = idText.getText().toString();
                final String userPassword = passwordText.getText().toString();
                boolean isAutoLoginEnabled=false;
                isAutoLoginEnabled = getAutoPreferences();

                if(isAutoLoginEnabled){
                    Response.Listener<String> responseListener = new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONObject jsonResponse = new JSONObject(response);
                                boolean success = jsonResponse.getBoolean("success");
                                if (success) {
                                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                    LoginActivity.this.startActivity(intent);
                                    finish();
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    };
                    LoginRequest loginRequest = new LoginRequest(getIDPreferences(), getPWPreferences(), responseListener);
                    RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
                    queue.add(loginRequest);
                }
                else {
                    isAutoLoginChecked();
                    if (loginChecked) {
                        savePreferences(userID, userPassword);
                    }
                    Response.Listener<String> responseListener = new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONObject jsonResponse = new JSONObject(response);
                                boolean success = jsonResponse.getBoolean("success");
                                if (success) {
                                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                    LoginActivity.this.startActivity(intent);
                                    finish();
                                } else {
                                    AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                                    dialog = builder.setMessage("계정을 다시 확인하세요")
                                            .setNegativeButton("다시 시도", null)
                                            .create();
                                    dialog.show();
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    };
                    LoginRequest loginRequest = new LoginRequest(userID, userPassword, responseListener);
                    RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
                    queue.add(loginRequest);
                }
            }
        });
    }
    @Override
    protected void onStop(){
        super.onStop();
        if(dialog != null){
            dialog.dismiss();
            dialog = null;
        }
    }
}

 

koko (120 포인트) 님이 2017년 8월 28일 질문

1개의 답변

0 추천
editor.apply(); -> editor.commit();
음무 (17,820 포인트) 님이 2017년 8월 28일 답변
어플리냐 커밋이냐는 동기냐 비동기냐 차이일텐데요...
상단 불린형 loginchecked의 초기값이 null이네요
isAutoLoginChecked()함수를 안거칠경우
savePreference의 호출이 안될것 같네요.
아하 그렇군요 .. 잘배워갑니다
소스를 보면 거칠 수 밖에 없지않을까요?
...