Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-从文本文件中检索特定行或标签并显示在列表视图中?_Android_Android Listview_Text Files - Fatal编程技术网

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++;
        }
    }    
}