2012-01-18 3 views
1

SharedPreferences를 원본과 다른 활동으로 복원하는 데 문제가 있습니다.동일한 응용 프로그램에서 별도의 활동을 통한 SharedPreferences

"NewCustomerActivity"및 "OldCustomerActivity"를 사용하는 두 개의 클래스가 있습니다. 둘 다 파일에 대한 읽기/쓰기 권한이 있어야합니다. 현재 활동을 죽일 때 양식 데이터를 적절히 복원하는 NewCustomerActivity에서 작성하여 테스트하고 있습니다. 그러나 NullPointerException 함께 NewCustomerActivity 같은 의미로 데이터를 복원하려면 시도하고 OldCustomerActivity 열면 FC를 받고 있어요.

public class NewCustomerActivity extends Activity { 

public static final String USER_INFO = "UserInfoFile"; // This file will the store the user's information for later use. 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.newcustomer); 
    SharedPreferences userInfo = getSharedPreferences(USER_INFO, 0); // Restore our earlier saved info. 
    EditText et; 
    ...... (Other code is irrelevant) 
} 

OldActivityNew은 동일합니다 : NewCustomerActivity

public class OldCustomerActivity extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.oldcustomer); 

    SharedPreferences userInfo = getSharedPreferences(NewCustomerActivity.USER_INFO, 0); // Restore our earlier saved info. 
    EditText et; 

    et = (EditText) findViewById(R.id.EditTextName); 
    et.setText(userInfo.getString("name","")); 
..... (Continue to fill forms in this context) 
} 

이 활동의 ​​모두 이전 정보와 함께 양식을 작성하고, 아무것도 변경된 경우 제출시 파일을 업데이트; 그러나 NewCustomerActivity 만 파일을 채우는 것 같습니다 (또는 강제로 닫는 것이 구체적이 아니어야합니다)

MODE_WORLD_READABLE (두 번째 매개 변수 = 1)에서 SharedPreference를 설정하려고 시도했지만 아무런 소용이 없습니다. 비록 내가 사생활에서 그것을 실행할 수 있어야한다고 나는 믿는다. 나는 또한 NewCustomerActivity.USER_INFO로 USER_INFO를 참조하려고 시도했습니다.

나는 명백한 것을 놓치고 있어야합니다. 그러나 어떤 도움을 주셔서 감사합니다.

편집 : 파일에 쓰고있는 방법을 묻는 사람들을 위해

:

 SharedPreferences userInfo = getSharedPreferences(USER_INFO, 0); // Save info for later 
     SharedPreferences.Editor userInfoEditor = userInfo.edit(); 
     EditText et; 
et = (EditText) findViewById(R.id.EditTextName); 
     String nameValue = et.getText().toString(); 
     userInfoEditor.putString("name", nameValue); 
+0

각 활동의 SharedPreference에 어떻게 쓰려고합니까? –

+0

다음은 스 니펫입니다. SharedPreferences userInfo = getSharedPreferences (USER_INFO, 0); // 나중에 정보를 저장하십시오. \t \t SharedPreferences.편집기 userInfoEditor = userInfo.edit(); \t \t EditText et; \t \t et = (EditText) findViewById (R.id.EditTextName); \t \t 문자열 nameValue = et.getText(). toString(); \t \t userInfoEditor.putString ("name", nameValue); –

+0

쓰기 작업을 커밋하지 않는 것 같습니다. 'SharedPreferences'를 적용하려면 모든 편집 작업을 완료 한 후에'userInfoEditor.commit(); '을 수행해야합니다. – curioustechizen

답변

0

당신은 당신이 쓴 것보다 다른 모드를 사용하여 oldCustomerActivity의 기본 설정을 얻기 위해 시도하는 것 같습니다 그들. 그 클래스에서이 줄을 변경 :

getSharedPreferences(NewCustomerActivity.USER_INFO, 1)

이 모드 매개 변수에 0을 사용 : 정의하지 않습니다 당신이 함수에 전달하는 값 int

getSharedPreferences(NewCustomerActivity.USER_INFO, 0)

당신이 읽고있는 경우 또는 글을 쓸 수 있지만, 처음 환경 설정을 작성한 후에 환경 설정이 어떻게 동작하게 할 것인지 정의합니다.

SharedPreferences.Editor editor = userInfo .edit();

당신은 다음과 같은 변수를 설정할 수 있습니다 :

editor.putString("username", "Ash");

더 많은 정보를 찾을 수 있습니다

당신이 그들을로드 한 후 호출 할 필요가 환경 설정을 편집하려면 here.

+0

미안하다. 오타. 나는 실제로 그것들을 원래 '0'(MODE_PRIVATE)로 가지고 있었고, '1'(MODE_WORLD_READABLE)로 변경하여 아무것도 바뀌지 않는지를 보았습니다. (개인적으로 가능하다는 가정하에 문서 나는 당신이 말한 것처럼 환경 설정을 쓰는 편집기를 사용한다. (단지 그것을 보여주지 않았다 - 그것은 양식이 제출 될 때 내가 사용하는 또 다른 기능에있다) 모든 것이 정확하게 쓰여진 것 같다. NewCustomerActivity Activity에서 데이터를 다시로드 할 수 있지만 입력에 대해 감사합니다. –

+0

글쎄, Eclipse에 있다면 Logcat을 열면 앱이 강제 종료 될 때 발생하는 오류가 표시됩니다. – Jivings

관련 문제