Сохранение пользовательских объектов при остановке activty на Android

#android #android-activity #storage

#Android #android-активность #Хранение

Вопрос:

Я написал небольшое приложение andorid. Это приложение использует вектор пользовательских объектов и отображает их в виде списка. Я хочу сохранить эти объекты, когда действие отправляется в фоновый режим. Каков наилучший способ для этого. В векторе около 25 объектов. Каждый объект имеет логическое значение, две длинные и две строки.

Спасибо за вашу помощь

Ответ №1:

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

если ваши объекты являются объектами, подлежащими отправке, вы можете использовать методы сохранения и восстановления состояния экземпляра:

     @Override
    protected void onSaveInstanceState(Bundle outState) {

        super.onSaveInstanceState(outState);
        outState.putParcelableArrayList("objectsArray", myObjects); // if its an array of parceleble objects

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
            myObjects= savedInstanceState.getParcelableArrayList("objectsArray");
    }
  

вот пример разделяемого объекта

общедоступный класс KNUserSketch реализует Parcelable{

 public int id;
public int user;
public String url;
public int views;
public int locations;


public KNUserSketch(JSONObject obj)
{
    id = KNSafeJSonUtilties.safeGetInteger(obj, "id");
    user = KNSafeJSonUtilties.safeGetInteger(obj, "user");
    views = KNSafeJSonUtilties.safeGetInteger(obj, "views"); 
    locations = KNSafeJSonUtilties.safeGetInteger(obj, "locations");
    url =  KNSafeJSonUtilties.safeGetString(obj, "url");
    Log.v("JSON","jsonObject: " obj.toString());
    url.replace("https:", "http:");
}

public KNUserSketch(){
    id=-1;
    user=-1;
    views = 0;
    url ="";
}

public KNUserSketch(Parcel p){
    id= p.readInt();
    user = p.readInt();
    url = p.readString();
    views = p.readInt();
    locations = p.readInt();
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeInt(id);
    dest.writeInt(user);
    dest.writeString(url);
    dest.writeInt(views);
    dest.writeInt(locations);
}

public static final Parcelable.Creator<KNUserSketch> CREATOR = new Creator<KNUserSketch>() {

    public KNUserSketch createFromParcel(Parcel source) {
        return new KNUserSketch(source);
    }

    public KNUserSketch[] newArray(int size) {
        return new KNUserSketch[size];
    }

};
  

}

Комментарии:

1. нет проблем .. кстати .. вы должны использовать состояния savedInstance для всего, что никогда не может быть нулевым в вашей деятельности.. иногда ваша активность переходит в фоновый режим, потому что у пользователя есть вызов, например.. пока он работает в фоновом режиме, ОС может собирать мусор, и когда ваша активность возвращается, это может привести к исключениям нулевого указателя.. хороший способ проверить наличие этих экземпляров — зайти в настройки разработчика вашего устройства и включить «не сохранять действия»

Ответ №2:

Вы могли бы использовать SharedPreferences, чтобы поместить объекты в безопасное место, но объекты должны будут реализовать Parcelable протокол.