【问题标题】:Get a string array from a raw text file?从原始文本文件中获取字符串数组?
【发布时间】:2012-01-07 13:50:42
【问题描述】:

首先,让我显示填充列表视图的字符串:

static final String[] title = new String[] {
    "Temaki Sushi", "Oyakodon", "Okonomiyaki", "Tofu Dango", "Oden",
    "Nikujaga", "Yellowtail Teriyaki", "Tendon", "Tonjiru", "Sukiyaki",
    };

现在,问题是,除了硬编码这些项目,有没有办法将项目引用到 res/raw 文件夹中的外部文本文件?假设我在 raw 文件夹中有一个标题为titles.txt 的文本文件。

【问题讨论】:

  • 为什么不使用android字符串数组的概念?
  • 我有一个大数据库,在这个例子中它只有 10 个项目。但是当应用程序完成后,它将包含 70 多个项目,并且每周都会更新。每当我需要进行更新或更改时,我发现编辑文本文件更容易,同意吗?还是字符串数组更容易?
  • 你需要这样的东西:stackoverflow.com/questions/2453989/…
  • 好的,也许你可以使用 assets 文件夹来存储你的文件并写入。这是有人尝试过的方法。 stackoverflow.com/questions/5086539/…

标签: android string listview text


【解决方案1】:

是的,你可以做到的

你应该像这样阅读文本

private String readTitlesRaw(){
    InputStream stream = Context.getResources().openRawResource(R.raw.titles))

    Writer writer = new StringWriter();
    char[] buffer = new char[10240];
    try {
        Reader reader = new BufferedReader(
        new InputStreamReader(stream, "UTF-8"));
        int n;
        while ((n = reader.read(buffer)) != -1) {
            writer.write(buffer, 0, n);
        }
    } finally {
        stream.close();
    }
    return writer.toString();
}

然后根据需要将其拆分为数组,这样的事情应该可以工作

String[] titles=readTitlesRaw().split("SPLITER");

当你在每个标题之间写 SPLITER

【讨论】:

  • 我在 Context.getResources() 行收到此错误:无法从 Context 类型中对非静态方法 getResources() 进行统计引用
  • 有什么想法可以解决这个问题吗?
  • 您可以将上下文传递给该方法! readTitlesRaw(Context con) 并在您调用它时给出您当前的上下文。使用 con.getResources(),因为它不是策略,你需要一个 Context 的对象来调用它。
【解决方案2】:

您可以在 res/values 下创建一个数组文件,在其中添加您的数组并使用 ArrayAdapter.createFromResource 将其与 ArrayAdapter 关联。 您应该提供上下文、要使用的数组以及项目的布局。

Arrays.xml 示例

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="EventArray">
        <item >Data</item>
        <item >Address</item>
        <item >Your items...</item>
    </string-array>    
</resources>

然后使用该 ArrayAdapter 填充您的列表视图!此代码将 EventArray 的内容放入您的列表中!

 list = (ListView) findViewById(R.id.list);  //get your listview
 arrayadapter = ArrayAdapter.createFromResource(this, R.array.EventArray, R.layout.YourListviewLayout); // create the arrayadapter from EventArray using YourListviewLayout.
 list.setAdapter(arrayadapter);

引用ArrayAdapter.createFromResourcehttp://developer.android.com/reference/android/widget/ArrayAdapter.html

【讨论】:

  • 不能这样做,列表视图中的项目正在膨胀包含多个文本视图和图像视图的视图。我必须用多个文本和图像资源填充列表视图。不过还是谢谢! ;)
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多