【问题标题】:Trying to store an AarryList of custom objects into shared preferences - Android尝试将自定义对象的 AarryList 存储到共享首选项中 - Android
【发布时间】:2014-11-13 22:43:07
【问题描述】:

我正在尝试将自定义对象的 ArrayList 存储到 SharedPreference 中,但我遇到了错误并且完全不知道该怎么做。请问有人可以帮我吗?

我已经获得了自定义对象的 ArrayList,然后将其存储到另一个对象中,以便我可以创建 Json String 对象以存储到 sharedPreferences 中。从而存储我的 ArrayList。

Here is the code that does this:
        ArrayList<SearchTerm> searchterms = new ArrayList<SearchTerm>();
        searchterms.add(new SearchTerm(query));
        Log.d(TAG, "object with attrb query added to ArrayList");
        //Placing ArrayList into another object to store in SharedPreferences
        searchterms_Wrapper = new ObjectForArrayList_searchTerms(searchterms);
        Log.d(TAG, "ArrayList added to another object ");
        // saving...
        Gson gson = new Gson();
        String objectContainingSerchTerms = gson.toJson(searchterms_Wrapper);
        PreferenceManager.getDefaultSharedPreferences(getActivity())
        .edit()
        .putString(SEARCH_TERM_ARRAY_LIST, objectContainingSerchTerms)
        .commit();
        Log.d(TAG, "searchTerm ArrayList saved...");

我的课:

public class SearchTerm implements Serializable {

private String searchTerm;

// Constructor
public SearchTerm(String searchTerm) {
    this.searchTerm = searchTerm;

.......

和:

public class ObjectForArrayList_searchTerms implements Serializable {
private ArrayList<SearchTerm> searchterms;

public ObjectForArrayList_searchTerms(ArrayList<SearchTerm> searchTerm) {
    this.searchterms = searchTerm;
}

堆栈跟踪:

11-13 22:31:49.971: E/AndroidRuntime(24689): FATAL EXCEPTION: main
11-13 22:31:49.971: E/AndroidRuntime(24689): Process: com.example.lifesci_pubmed, PID: 24689
11-13 22:31:49.971: E/AndroidRuntime(24689): java.lang.NoClassDefFoundError: com.google.gson.Gson
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.lifesci_pubmed.ArticleListFragment_develop.onOptionsItemSelected(ArticleListFragment_develop.java:428)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.support.v4.app.Fragment.performOptionsItemSelected(Fragment.java:1612)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.support.v4.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:2018)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:379)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1012)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:177)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.widget.AdapterView.performItemClick(AdapterView.java:299)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.widget.AbsListView$3.run(AbsListView.java:3645)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.os.Handler.handleCallback(Handler.java:733)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.os.Handler.dispatchMessage(Handler.java:95)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.os.Looper.loop(Looper.java:136)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at android.app.ActivityThread.main(ActivityThread.java:5086)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at java.lang.reflect.Method.invokeNative(Native Method)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at java.lang.reflect.Method.invoke(Method.java:515)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
11-13 22:31:49.971: E/AndroidRuntime(24689):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 您是否已将GSON 库添加到您的项目中?
  • 是的,我有。代码没有给出任何红线。
  • 尝试在 Project Properties -> Java Build Path -> Order and Export 选项卡中选中 lib (gson-2.3.jar) 旁边的复选框。然后进行清理/构建。
  • 我的意思是在运行项目之前,你点击了Project -> Clean .. 吗?
  • @user3274549 与任何具有 clean 选项的 make 文件几乎相同。它删除为运行时编译的对象或任何其他运行时生成的文件等。通常你会做一个清理和构建,即清理你的项目并构建。

标签: android


【解决方案1】:

选中 lib (gson-2.3.jar) 旁边的复选框:Project Properties -> Java Build Path -> Order and Export 选项卡。然后执行clean -> build

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 2014-01-16
    • 2011-10-05
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多