Arraylist оставить пустым при возвращении из другой деятельности - PullRequest
0 голосов
/ 21 октября 2018

Итак, дело простое, у меня есть RegisterActivity, и я хочу создать массив списков пользователя класса и хранить данные об id, электронной почте и пароле.Затем я хочу передать это значение в LoginActivity, чтобы я мог использовать его для проверки, если пользовательские данные уже созданы или нет.

Но каждый раз, когда я передаю значение массива, оно работает в первый раз,и затем после того, как я вернусь к RegisterActivity и попытаюсь зарегистрироваться снова, он не сохраняется во 2-м значении пользователя массива, но сохраняется в 1-м значении, то есть массив пуст, когда я возвращаюсь в RegisterActivity.

Это то, что я делаю.

В Регистрационной Деятельности

                users.add(new User(newId,strEmail,strPass));

                Intent i = new Intent(RegisterActivity.this,LoginActivity.class);

                Bundle bundle  = new Bundle();
                bundle.putSerializable("userData",users);
                i.putExtras(bundle);
                startActivity(i);

В Регистрационной Деятельности

ArrayList<User> users;
Bundle bundleUser;

    bundleUser = getIntent().getExtras();
    users = (ArrayList<User>) bundleUser.getSerializable("userData");

Есть ли у вас какое-либо решение?

Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 21 октября 2018

Armit и Sniffer оба являются правильными (у меня не было времени, чтобы проверить ссылку Люсфера на сериализацию всего массива и сохранение его за один раз).У вас есть несколько вариантов здесь, в зависимости от вашей ситуации.

Как общее практическое правило при хранении значений в Android:

Когда вы хотите временно сохранить данные, когда у пользователя открыто приложение(даже если приложение перемещено в фоновый режим), но требуется, чтобы данные сбрасывались до исходных значений (0, ложь или ноль, если не определено) каждый раз, когда вы закрываете приложение:

-Используйте SavedInstanceState, который будетдаже защитить данные от изменений поворота экрана.

ИЛИ

- Создайте новый класс Java и сохраните в нем свои данные.Данные, хранящиеся в файле класса Java, будут сохранять свое значение до тех пор, пока приложение открыто (даже когда приложение перемещено в фоновый режим), где данные, хранящиеся в Activity, будут сбрасывать свои значения при изменении ориентации или даже при переходе к другому.активность, если данные явно не сохраняются и не передаются ... (НИЖЕ ПРИМЕР КУРСА SINGELTON JAVA)

public class RegularJavaClass {
   public static RegularJavaClass myObj;

   public RegularJavaClass(){}

   public static RegularJavaClass getInstance() {
    if (myObj == null) {
        myObj = new RegularJavaClass();
    }

    return myObj;
   }

    private int myNumValue;
    private String myStringValue;

    public int getMyNumValue() {
    return myNumValue;
    }
    public void setMyNumValue(int myNumValue) {
    this.myNumValue = myNumValue;
   }
    public String getMyStringValue() {
    return myStringValue;
    }
    public void setMyStringValue(String myStringValue) {
    this.myStringValue = myStringValue;
    }
   }

ТОГДА, КОГДА ВЫ ВЫЗЫВАЕТЕ ЭТОТ КЛАСС, ЧТОБЫ ИСПОЛЬЗОВАТЬ STUFF USE

int someNum = 3000;
String someString = "saveThisString";

RegularJavaClass.getInstance().setMyNumValue(someNum);
RegularJavaClass.getInstance().setMyStringValue(someString);

ТОГДА, КОГДА ВЫ ХОТИТЕ ПОЛУЧИТЬ ЭТУ ДАННЫЕ

int retrieveNum = RegularJavaClass.getInstance().getMyNumValue();
String retrieveString = RegularJavaClass.getInstance().getMyStringValue();

Когда вы хотите сохранить небольшой объем данных и сохранить его, даже когда приложение будет закрыто и снова открыто позднее (илипока приложение не будет удалено или явно изменено разработчиком)

-Используйте sharedPreferences.Думайте об этом как о крошечной базе данных, с которой каждое приложение для Android поставляется автоматически.Не забывайте хранить здесь МАЛЕНЬКОЕ количество данных

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                SharedPreferences prefs =
                        getSharedPreferences("StorageName", MODE_PRIVATE);

                SharedPreferences.Editor editor = prefs.edit();
                //The value type determines the "put" in your case break the
                //array into a for statement and save each value
                for (String s : myArray) {
                    //s would be the value
                    //make a key for your stored value just like a HashMap
                    editor.putString(key, value).apply();

                }

            }
        });
        t.start();
    }
 }

ПОТОМ, ЧТОБЫ ПОЛУЧИТЬ ВАШИ ХРАНЯЕМЫЕ ЗНАЧЕНИЯ ПОЗЖЕ

   @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        SharedPreferences prefs =
                getSharedPreferences("StorageName", MODE_PRIVATE);
                //Always enter a default value for just in case the storage 
                 //value is empty
                String myStoredValue = prefs.getString(key,null);
    }
}

Когда вы хотите сохранить БОЛЬШОЙ объем данных и сохранить его даже тогда, когдаприложение закрывается и снова открывается позднее (или до тех пор, пока приложение не будет удалено или явно изменено разработчиком)

-Используйте базу данных, такую ​​как SQLite

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