【问题标题】:Creating arraylist from a string with shared preferences从具有共享首选项的字符串创建数组列表
【发布时间】:2015-08-08 16:58:09
【问题描述】:

我想知道如何获取一个保存在共享首选项中的简单字符串,然后保存每个字符串并将它们显示到数组列表中。用户将每天保存一次字符串。我希望字符串显示为数组列表。这是我正在使用的代码。我有“physical_fragment.java”(保存数据)和“MainActivity.java”(加载数据)。

PHSYICAL_FRAGMENT.JAVA

    public void save(View view){

    Date date = new Date();
    String stringDate = DateFormat.getDateInstance().format(date);

    SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor =sharedPreferences.edit();
    editor.putString("result",String.format(stringDate, date) + " - " + text_view5.getText().toString());

    editor.commit();
    Toast.makeText(this, "Saved successfully!", Toast.LENGTH_LONG).show();

}

MAINACTIVITY.JAVA

    resultPhysical= (TextView) findViewById(R.id.home);

    SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE);
    String result= sharedPreferences.getString("result",DEFAULT);

    if (result.equals(DEFAULT))
    {
        Toast.makeText(this, "No data found", Toast.LENGTH_LONG).show();
    }
    else

        Toast.makeText(this, "Load Successful", Toast.LENGTH_LONG).show();
    resultPhysical.setText(result);


    }

【问题讨论】:

  • 您面临的问题是什么?我只看到您正在尝试做的事情的描述,但看不到您卡在哪里。
  • 我没有尝试将其转换为数组列表,因为我不知道如何。我什至不知道从哪里开始。我是编码新手 :(
  • 我不清楚您要做什么,您能否编辑您的帖子以添加此类字符串的一个(或多个)示例以及填充后的数组列表应该如何?
  • 当它保存并加载“结果”时,我不希望只有一个结果。我希望每个结果都保存并显示为数组列表

标签: java android string arraylist


【解决方案1】:

我会说使用GSON

要将字符串列表转换为 JSON 以存储在首选项中,请使用以下命令:

List<String> list = ...

Type type = new TypeToken<List<String>>(){}.getType();
String json = gson.toJson(list, type);

并使用putStringjson 存储在SharedPreferences 中。

要从SharedPreferences 读取,您可以使用以下内容:

String result = sharedPreferences.getString("result", DEFAULT);

Type type = new TypeToken<List<String>>(){}.getType();
List<String> list = gson.fromJson(result, type);

【讨论】:

  • 字符串列表,当然 :-) 你有一个用户添加的字符串列表,对吧?
  • 等等。我应该把所有这些都放在我的主要活动中吗? --对不起,我是编码新手
  • 作为两种方法,何乐而不为。我担心 SO 不是从头开始学习编码的最佳场所。我们会回答你的问题,但是从一开始就很难教别人编码:-/
  • 我明白,因为我完全迷失了你给我的代码,哈哈。但是感谢您的努力。
【解决方案2】:

你可以这样做:

SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE);
SharedPreferences.Editor editor =sharedPreferences.edit();

ArratList<String> dataList;
String data = "";
for(String itemData:dataList){
    data = itemData + String.format(stringDate, date) + " - " +  text_view5.getText().toString()+ "/";
    editor.putString(data);
}

editor.commit();

现在从共享首选项中获取字符串并将其拆分。

String result= sharedPreferences.getString("result",DEFAULT);
String[] splited = str.split("/");

这有助于不支持会影响 apk 文件大小的库

【讨论】:

  • 我刚刚在文本文档上写了。你可以编辑这个。我在代码中做了一些更改。检查一次
  • data = itemData + String.format(stringDate, date) + " - " + text_view5.getText().toString()+ "/";
  • 我在“(String itemData:dataList){”和“editor.putString(data);”上得到一个错误
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 2021-06-24
  • 1970-01-01
  • 2015-09-03
  • 2018-02-06
  • 2023-03-07
  • 2016-08-24
相关资源
最近更新 更多