【问题标题】:Android: to save values in ArrayListAndroid:在 ArrayList 中保存值
【发布时间】:2015-04-12 00:14:48
【问题描述】:

我想用 SharedPreference 将值保存在 ArrayList 中。然后,我想从另一个类调用 ArrayList 中的值,但它没有保存。我怎样才能做到这一点?使用 SharedPreferences?保存文件?还是创建 Sqlite?感谢您的帮助。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button saveButton = (Button)findViewById(R.id.button);
    final Button delButton = (Button)findViewById(R.id.delButton);
    final ListView listView = (ListView)findViewById(R.id.listView);
    final EditText editText = (EditText)findViewById(R.id.editText);
    final ArrayList<String> arrayList = new ArrayList<String>();

    SharedPreferences sharedPref = this.getPreferences(Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = this.getPreferences(Activity.MODE_PRIVATE).edit();
    editor.putString("numbers", arrayList.toString());
    editor.commit();

    String arrayString = sharedPref.getString("numbers", null);

    final ArrayAdapter<String> arrayAdapter;
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arrayList);
    listView.setAdapter(arrayAdapter);

    saveButton.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View v)
        {
            String str = editText.getText().toString();
            Integer cout = listView.getCount()+ 1;
            String str1 = cout.toString().concat("."+str);
            arrayList.add(listView.getCount(), str1);

            arrayAdapter.notifyDataSetChanged();
            Toast.makeText(getApplicationContext(), "Data Saved", Toast.LENGTH_SHORT).show();
            editText.setText(" ");
        }
    });

    delButton.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View v)
        {
            arrayList.remove(arrayList.size()-1);
            arrayAdapter.notifyDataSetChanged();
        }
    });

}

【问题讨论】:

    标签: android arraylist save sharedpreferences


    【解决方案1】:

    我认为你不能这样做editor.putString("numbers", arrayList.toString());,因为 object.toString() 不会将 ArrayList 转换为 String,它只会产生一些奇怪的东西,比如“@Object3223rw”,请查看这篇文章而不是 Save ArrayList to SharedPreferences

    【讨论】:

      【解决方案2】:

      保存列表:

      editor.putString("List", TextUtils.join(",", myList));
      

      获取列表:

      String serialized = sharedPref.getString("List", null);
      myList = Arrays.asList(TextUtils.split(serialized, ","));
      

      List 而非ArrayList 有效的观察,因为asList 返回List。如果您有与 set 一起使用的重复字符串,则 Tofasio 的答案不起作用。

      【讨论】:

      • 这是错误的。不兼容的类型。必需:java.util.ArrayList 找到:java.util.list
      • 制作这个List&lt;String&gt; arrayList = new ArrayList&lt;String&gt;();
      • 如果我这样做,它不能添加和删除值值,因为它会给出错误:
      • "变量'arrayList'从内部类访问,需要声明为final"
      • 制作arrayList实例字段。
      【解决方案3】:

      我的理解是只使用 SharedPreference 来保存简单的键值对(bool、float、int、long 和 string),而不是作为数据存储。如果您需要保存更复杂的数据对象(包括列表和数组),则需要序列化/反序列化并保存在磁盘上。

      http://developer.android.com/guide/topics/data/data-storage.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-17
        • 2014-06-14
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 2021-04-02
        相关资源
        最近更新 更多