SharedPreferences для разных действий в одном приложении - PullRequest
1 голос
/ 18 января 2012

У меня возникли проблемы с восстановлением SharedPreferences в активности, отдельной от оригинала.

У меня есть два класса, которые используют это, "NewCustomerActivity" и "OldCustomerActivity".Оба должны иметь доступ на чтение / запись к файлу - в настоящее время я просто тестирую, записывая из NewCustomerActivity, который соответствующим образом восстановит данные формы после уничтожения действия;однако я получаю FC при открытии OldCustomerActivity, которое пытается восстановить данные в том же смысле, что и NewCustomerActivity с NullPointerException.

NewCustomerActivity:

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 - это то же самое:

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 заполняет файл (или не требует принудительного закрытия, чтобы быть точным)

Я попытался настроить SharedPreference в MODE_WORLD_READABLE (второй параметр = 1), но безрезультатно;хотя я верю, что смогу запустить его в режиме «ЧАСТНЫЙ», как есть.Я также пытался сослаться на USER_INFO как NewCustomerActivity.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);

1 Ответ

0 голосов
/ 18 января 2012

Похоже, вы пытаетесь получить настройки в oldCustomerActivity, используя режим, отличный от того, который вы им написали.Измените эту строку в этом классе:

getSharedPreferences(NewCustomerActivity.USER_INFO, 1)

, чтобы использовать 0 для параметра режима:

getSharedPreferences(NewCustomerActivity.USER_INFO, 0)

Int, который вы передаетефункция не определяет, читаете ли вы или пишете, но определяет, как вы хотите, чтобы предпочтения вели себя после первой записи.

Чтобы отредактировать настройки после их загрузки, вам нужно вызвать:

SharedPreferences.Editor editor = userInfo .edit();

Затем вы можете установить переменные следующим образом:

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

Более подробную информацию можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...