2013-03-06 2 views
0

내가 읽고 클래스를 통해 SharedPreferences을 쓰고 싶어하지만 내 활동이 클래스를 호출 할 때 응용 프로그램 충돌은/가까운 CheckBox "이메일을 기억"이 선택되어된 SharedPreferences 가까이 앱이 강제하게

경우 강제한다 앱에서 이메일을 기억합니다. 내 LoginActivity

: 약간의 시간이이 문제를 해결하기 위해 내가 SO에서 몇 가지 솔루션을 시도하기위한

public class LoginActivity extends Activity 
{ 
    private AppPreferences appPreferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login);   
     appPreferences = new AppPreferences(); // this makes the app crash 
     String email = appPreferences.getPreferenceString("email"); 
     // ... 

클래스 appPreferences

public class AppPreferences extends Activity 
{ 
    private SharedPreferences settings = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     settings = this.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE); 
    } 
    public String getPreferenceString(String key) { 
     return settings.getString(key, DEFAULT_STRING); 
    } 
    public void setPreferenceString(String key, String value) { 
    editor.putString(key, (String) value); 
    } 
// ... 

내가 찾고 있었어요. 나는 getSharedPreferences 메서드를 onCreate 메서드에서 호출하므로 문제는되지 않습니다.

내가 뭘 잘못하고 있니? Java 및 Android 개발에 익숙하지 않으므로 예제로 완벽하게 설명하십시오. 완전히 다른 접근 방식을 가진 다른 솔루션도 환영합니다. 미리 감사드립니다.

+0

LogCat을 보여주십시오. 어떤 종류의 오류가 있습니까? – hakiko

+0

@Dediqated 당신은 내 솔루션을 시도 했습니까 .. 여전히 logcat 게시 오류. –

답변

1

Activity 클래스를 확장하는 클래스의 개체를 만들려고하기 때문에. AppPreferences 비 활동 클래스이면 마찬가지로 별도 자바 클래스 된 SharedPreferences에게 관련 코드를 분리 현재 작업 콘텍스트를 건네

public class AppPreferences 
{ 
    private SharedPreferences settings = null; 
    Context context; 
    public AppPreferences(Context context){ 
    this.context=context; 
    settings = context.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE); 
    } 
//your code here.... 

}가

지금 AppPreferences 생성자를 사용하여 작업 콘텍스트를 통과 :

appPreferences = new AppPreferences(LoginActivity.this); 
String email = appPreferences.getPreferenceString("email"); 
+0

! 덕분에 이것도 효과, 설명 주셔서 감사합니다. 이제는 앱을 강제 종료하면 이메일이 기억되지 않습니다. 어떻게 알았습니까? – Dediqated

1

AppPreferences에서 활동 클래스를 확장하지 마십시오. onCreate() 메소드를 제거하십시오.

이렇게하면됩니다.

public class AppPreferences extends Activity 
{ 
    private SharedPreferences settings = null; 
    AppPreferences(Context context) { 
     settings = context.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE); 
    } 

    ...//Rest of your code. 

} 

로그인 활동.

appPreferences = new AppPreferences(this); 
+0

당신의 솔루션은 너무 효과적입니다, 비록 내가 단지 선호도를 사용한다면 그 확장이 있어야만하는지 모르겠지만 – Dediqated