【问题标题】:Failed to Store ArrayList<String> in SharedPreferences in Android using JAVA ?无法使用 JAVA 在 Android 的 SharedPreferences 中存储 ArrayList<String> ?
【发布时间】:2014-02-07 13:09:50
【问题描述】:

这是在 Android 的 SharedPreferences 中保存 ArrayList 但在此 LOC 处出错的代码:

 myAList.add(sEdit.getString("val"+j,""));

通过表明

方法 getString(String) 未定义类型 SharedPreferences.Editor 方法 getString(String) 未定义类型 SharedPreferences.Editor

public static void setValuesInSession(Context c,ArrayList<String> myArrayList)
{
    SharedPreferences sPrefs=PreferenceManager.getDefaultSharedPreferences(c);
    SharedPreferences.Editor sEdit=sPrefs.edit();

    for(int i=0;i<myArrayList.size();i++)
    {
             sEdit.putString("val"+i,myArrayList.get(i));
    }
     sEdit.putInt("size",myArrayList.size());
     sEdit.commit();

}
public static ArrayList<String> getValuesOfSession(Context c)
{
    SharedPreferences sPrefs=PreferenceManager.getDefaultSharedPreferences(c);
    SharedPreferences.Editor sEdit=sPrefs.edit();
    ArrayList<String> myAList=new ArrayList<String>();
    int size=sPrefs.getInt("size",0);

    for(int j=0;j<size;j++)
    {
     // Log.i("MYlIST ADD",""+);
         myAList.add(sEdit.getString("val"+j,""));
    }
    return myAList;
}

【问题讨论】:

    标签: java android arraylist sharedpreferences


    【解决方案1】:

    您正在尝试从 Editor 获取字符串值,而不是从 SharedPreferences 中检索它。

    替换

    myAList.add(sEdit.getString("val"+j,""));
    

    myAList.add(sPrefs.getString("val"+j,""));
    

    结果

    public static ArrayList<String> getValuesOfSession(Context c)
    {
        SharedPreferences sPrefs=PreferenceManager.getDefaultSharedPreferences(c);
        ArrayList<String> myAList=new ArrayList<String>();
        int size=sPrefs.getInt("size",0);
    
        for(int j=0;j<size;j++)
        {
         // Log.i("MYlIST ADD",""+);
             myAList.add(sPrefs.getString("val"+j,""));
        }
        return myAList;
    }
    

    并且不建议调用以“s”开头的局部变量,因为 Android 代码样式指南鼓励调用以 s 开头的非最终静态字段和以 m 开头的非公共成员字段。

    【讨论】:

    • 是的,你的回答是对的,你能帮我保存整个列表,不管我提供给函数的列表是什么
    【解决方案2】:

    试试这个...

    for(int i=0;i<myArrayList.size();i++)
        {
                 sEdit.putString("val"+i,myArrayList.get(i).toString());
        }
    

    下面是我的代码..我和你做的一样..工作......

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
                 SharedPreferences.Editor editor = preferences.edit();
                 editor.putInt("Size", languageNames.size());
    
                 for(int i=0; i<languageNames.size(); i++)
                 {
                     editor.putString("data" + i, languageNames.get(i).toString());
                 }
    
                 editor.putString("ID",id);
                 editor.putString("Email", email);
                 editor.putString("Birthday", birthday);
                 editor.putString("Username", username);
                 editor.putString("Location", location);
                 editor.putString("Gender", gender);
                 editor.commit();
    

    获取数据...

    ArrayList<String> languageNames = new ArrayList<String>();
    
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    
                int array_size = preferences.getInt("Size", 0);
                id = preferences.getString("ID", "");
                username = preferences.getString("Username", "");
                email = preferences.getString("Email", "");
                birthday = preferences.getString("Birthday", "");
                location = preferences.getString("Location", "");
                gender = preferences.getString("Gender", "");  
    
                languageNames.clear();
                for(int i=0; i<array_size; i++)
                {
                    languageNames.add(preferences.getString("data" + i, "").toString());
                }
    

    【讨论】:

      【解决方案3】:
             public static ArrayList<String> getValuesOfSession(Context c) {
             SharedPreferences sPrefs=PreferenceManager.getDefaultSharedPreferences(c);
             ArrayList<String> myAList=new ArrayList<String>();
             int size=sPrefs.getInt("size",0);
      
             for(int j=0;j<size;j++)
             {
              // Log.i("MYlIST ADD",""+);
                  myAList.add(sPrefs.getString("val"+j,""));
             }
             return myAList;
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-19
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        相关资源
        最近更新 更多