Android-从文本文件中检索特定行或标签并显示在列表视图中?
我有一个文本文件,我能够阅读全部内容并将其显示在视图上 示例文件: 但我的要求是我需要从字段名中获取特定数据。Android-从文本文件中检索特定行或标签并显示在列表视图中?,android,android-listview,text-files,Android,Android Listview,Text Files,我有一个文本文件,我能够阅读全部内容并将其显示在视图上 示例文件: 但我的要求是我需要从字段名中获取特定数据。 例如,我需要从标签_1中检索名称_1、地址_1和电话_1,然后显示在单独的列表视图中。然后标记_2值等等。我认为应该使用JSON:但我是谁 [ { "Name": "name_1", "Adress": "adress_1", "Phone": "phone_1" }, { "Name": "nam
例如,我需要从标签_1中检索名称_1、地址_1和电话_1,然后显示在单独的列表视图中。然后标记_2值等等。我认为应该使用JSON:但我是谁
[
{
"Name": "name_1",
"Adress": "adress_1",
"Phone": "phone_1"
},
{
"Name": "name_2",
"Adress": "adress_2",
"Phone": "phone_2"
},
{
"Name": "name_3",
"Adress": "adress_3",
"Phone": "phone_3"
}
]
现在您可以使用JSONArray和JSONObject来检索项目了
ArrayList<Person> personList = new ArrayList<>();
try {
JSONArray jArray = new JSONArray(json);
for (int i = 0; i < jArray.length(); i++) {
try {
JSONObject oneObject = jArray.getJSONObject(i);
String name = oneObject.getString("Name");
String adress = oneObject.getString("Adress");
String phone = oneObject.getString("Phone");
personList.add(new Person(name, adress, phone));
} catch (JSONException e) {
// Oops
}
}
} catch (JSONException e) {
e.printStackTrace();
}
您可以将列表中的人员用于listView。有不同的方法来解决此问题,这不是android的问题。将文本文件放入res\raw文件夹,例如res\raw\test.txt,以下代码可能会很有用: 您可以在下面的示例中尝试类似的代码 此代码仅适用于文本文件,但您可以更改其他结构:
:: label_1
[NAME_1]
[ADDRESS_1]
<PHONE_1>
:: label_2
[NAME_2]
[ADDRESS_2]
<PHONE_2>
:: label_3
[NAME_3]
[ADDRESS_3]
<PHONE_3>
编辑
假设文本是,我更改了一段代码:
String[] words = (new String(b)).split("\\n");
HashMap<Integer, HashMap<String, String>> h1 = new HashMap<Integer, HashMap<String, String>>();
int groupNumber = 1;
for (int i = 0; i < words.length; i++) {
String str = words[i];
if (!str.trim().isEmpty()) {
if(str.contains("::")){
HashMap<String, String> h2 = new HashMap<String, String>();
h1.put(groupNumber, h2);
} else {
h1.get(groupNumber).put(PHONE, words[i]);
h1.get(groupNumber).put(ADDRESS, words[++i]);
h1.get(groupNumber).put(NAME, words[++i]);
groupNumber++;
}
}
}
你可以试试他的对不起!这个文本文件总是那个格式吗?然后,您可以使用BufferedReader读取每一行,使用::作为分隔?是的,每个集合在第一行中都有起始“::”。这意味着启动了一组新的详细信息。只需要.txt文件的解决方案,而不是JSON格式引用此内容…..感谢您提供的解决方案。但就我而言,我们不会有标签、姓名、地址和电话。txt文档有一个没有任何标签的直接值。这就是我为标签名称添加不同编号的原因。因此,每一行都有不同的名称和地址。我在下面添加了一个文本结构示例,这将使它更加清晰@vishnupalanivelM好的,为了解决这个问题,必须为获取每个值设置一个特定的结构,正如您所说的,如果每个头都是::Carpenter,那么获取组的唯一方法就是搜索字符串::。这是正确的吗?我需要一个确定每组的模式。谢谢你的解决方案谢谢。我可以获取所有唯一ID的::title值。但是我需要中间数据的细节,而不需要散列映射。数据有时也在下一行。我的意思是,在某些情况下,我有5行,在其他情况下,我有8行文本。所以我需要下面的所有行::直到下一行::
h1.get(1).get(PHONE);//this returns de phone value from group 1
:: label_1
[NAME_1]
[ADDRESS_1]
<PHONE_1>
:: label_2
[NAME_2]
[ADDRESS_2]
<PHONE_2>
:: label_3
[NAME_3]
[ADDRESS_3]
<PHONE_3>
String[] words = (new String(b)).split("\\n");
HashMap<Integer, HashMap<String, String>> h1 = new HashMap<Integer, HashMap<String, String>>();
int groupNumber = 1;
for (int i = 0; i < words.length; i++) {
String str = words[i];
if (!str.trim().isEmpty()) {
if(str.contains("::")){
HashMap<String, String> h2 = new HashMap<String, String>();
h1.put(groupNumber, h2);
} else {
h1.get(groupNumber).put(PHONE, words[i]);
h1.get(groupNumber).put(ADDRESS, words[++i]);
h1.get(groupNumber).put(NAME, words[++i]);
groupNumber++;
}
}
}