我需要从位于res / raw / file.txt下的txt文件中读取数据,并在ListView中显示每一行。但是当应用程序启动时,ListView为空。 这是在onCreate:
之前定义的private SimpleAdapter sa;
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
这是代码:
InputStream inputStream = getResources().openRawResource(R.raw.definitions);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
try
{
HashMap<String, String> item;
while ((line = reader.readLine()) != null)
{
String[] strings = TextUtils.split(line, "-");
if (strings.length < 2)
{
item = new HashMap<String, String>();
item.put("line1", strings[0].trim());
item.put("line2", strings[1].trim());
list.add(item);
}
}
mTextView.setText("");
sa = new SimpleAdapter(this, list,
R.layout.result,
new String[] { "line1","line2" },
new int[] {R.id.word, R.id.definition});
mListView.setAdapter(sa);
reader.close();
}
catch(Exception e)
{
Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:1)
它看起来很好但是如果(strings.length &lt; = 2)有一个小的逻辑变化。它适用于我。
尝试
if (strings.length <= 2) {
item = new HashMap<String, String>();
item.put("line1", strings[0].trim());
item.put("line2", strings[1].trim());
list.add(item);
}
答案 1 :(得分:-1)
在onCreate()之前定义的是什么意思。在onCreate()之前定义并不意味着它将在onCreate()之前调用。当活动在onCreate()中开始时,您需要调用上面的代码。