簡體   English   中英

Android-保存自定義對象-共享首選項還是數據庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM