[英]Android - Saving custom object - Shared Preferences or Database?
我正在創建一個基於位置的提醒應用程序。
我有一個名為Reminder的自定義對象,該對象存儲緯度,經度,位置名稱和提醒主題-以及它所屬的配置文件。
然后,我將位置名稱和主題輸入到ListView中(也在這里使用cardlibs)。
但是,現在我需要保存關閉應用程序時的數據,並且想知道解決此問題的最佳方法-我是存儲整個“提醒”對象還是僅在共享首選項/數據庫中存儲多條數據。
這是我的代碼-非常低效/丑陋:
提醒:
public class Reminder implements Parcelable {
public double latitude;
public double longitude;
public String subject;
public String locationName;
public String profile;
public Reminder() {
}
public Reminder(Parcel in) {
String[] data = new String[5];
in.readStringArray(data);
this.subject = data[0];
this.locationName = data[1];
this.latitude = Double.parseDouble(data[2]);
this.longitude = Double.parseDouble(data[3]);
this.profile = data[4];
}
public String getProfile() {
return profile;
}
public double getLatitude() {
return latitude;
}
public String getLocationName() {
return locationName;
}
public double getLongitude() {
return longitude;
}
public String getSubject() {
return subject;
}
public void setProfile(String profile) {
this.profile = profile;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public void setLocationName(String locationName) {
this.locationName = locationName;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public void setSubject(String subject) {
this.subject = subject;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] { this.subject, this.locationName,
String.valueOf(this.latitude), String.valueOf(this.longitude), this.profile });
}
public static final Parcelable.Creator<Reminder> CREATOR = new Parcelable.Creator<Reminder>() {
public Reminder createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new Reminder(source); // using parcelable constructor
}
public Reminder[] newArray(int size) {
// TODO Auto-generated method stub
return new Reminder[size];
}
};
}
使用片段列出:
public class HomeFragment extends Fragment {
public static ArrayList<Card> cards = new ArrayList<Card>();
Reminder reminder;
public HomeFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
reminder = getActivity().getIntent().getParcelableExtra("reminder");
Card card = new Card(getActivity());
CardHeader cardHeader = new CardHeader(getActivity());
if (reminder != null) {
cardHeader.setTitle(reminder.getSubject());
card.addCardHeader(cardHeader);
card.setTitle(reminder.getLocationName());
cards.add(card);
}
CardArrayAdapter mCardArrayAdapter = new CardArrayAdapter(
getActivity(), cards);
CardListView listView = (CardListView) getActivity().findViewById(
R.id.card_list);
mCardArrayAdapter.notifyDataSetChanged();
if (listView != null)
listView.setAdapter(mCardArrayAdapter);
}
對我的代碼如何更好地編寫的任何批評也將非常有益,因為我覺得自己是一個新手,並且缺少明顯的東西,可以提高效率。
謝謝!
基本上,選擇使用共享首選項還是使用數據庫取決於很多事情:
1)我們在談論幾個對象? 它們有多復雜?
2)您打算搜索/操作這些對象還是只是保存/加載它們。
3)您打算導出/移動/發送對象嗎?
4)您是否希望對象可以在應用程序上下文中恢復-這不僅僅是所討論的單個應用程序。
在您的特定情況下,我將使用數據庫。
http://developer.android.com/guide/topics/data/data-storage.html#pref
正如您在此處的文檔中可以看到的,prefs並不是真正用於對象存儲的-它是用於鍵值對的。 雖然您可以將對象作為多個鍵值對存儲在共享的首選項中,然后從那里進行重構,但是您必須經過一些怪異的模型轉換才能對多個對象執行此操作。 簡而言之,這沒有任何意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.