#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 протокол.