본문 바로가기
Android

2차 작성(파싱함수 수정)

by Birthmark 2020. 7. 15.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
    public Map<StringString> parseXml() {
        Log.i(TAG, "parser()");
        //内部XMLファイル使う際に
        InputStream inputStream = getResources().openRawResource(R.raw.sample);
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader reader = new BufferedReader(inputStreamReader);
        ArrayList<String> positions = new ArrayList<>();
        ArrayList<String> pointNames = new ArrayList<>();
        Map<StringString> pMap = new HashMap<>();
 
 
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlParser = factory.newPullParser();
            xmlParser.setInput(reader);
            String startTag,endTag; // TAGを保存のため
 
            int index = 0;
            // temp = new Point();
            int eventType = xmlParser.getEventType();
            //END TAGじゃないと Loopを回しながらParsingになる
            Point p = new Point();
            while (eventType != END_DOCUMENT) {
                switch (eventType) {
                    case START_TAG:
                        startTag = xmlParser.getName(); //現タグ名を保存
                        Log.i(TAG, "startTag :" + startTag);
                        if(startTag.equals("meter")) {
                            int add = 0;
                            xmlParser.nextTag();
                            while(true) {
 
                                if (xmlParser.getAttributeValue(0).contains("表示名")) {
                                    String name;
 
                                    p.setPointNum(xmlParser.getAttributeValue(1));
                                    name = xmlParser.getAttributeValue(1);
                                    add++;
                                    Log.i(TAG, "表示名 add :" + add);
                                    Log.i(TAG, "表示名 index :" + index / 2);
                                    pointNames.add(name); //listに保存
                                    Log.i(TAG, "pointNames.toString():" + pointNames.toString());
 
                                }
                                xmlParser.nextTag();
                                xmlParser.nextTag();
                                index++;
                                if(xmlParser.getName().equals("meter")) {break;}
 
                            }
                        }
 
                        else if(startTag.equals("beacon")) {
                            int add = 0;
                            xmlParser.nextTag();
                            while(true) {
                                if (xmlParser.getAttributeValue(0).contains("表示位置")) {    //ポイントの最後のパラメタ
                                    String pos;
 
                                    p.setPosition(xmlParser.getAttributeValue(1));
                                    pos = xmlParser.getAttributeValue(1);
                                    add++;
                                    Log.i(TAG, "表示位置 add :" + add);
                                    Log.i(TAG, "表示位置 index :" + index / 2);
 
                                    makePointLocation(pos,pointNames.get(add-1));
                                    positions.add(pos);//listに保存
 
                                    Log.i(TAG, "positions.toString():" +positions.toString());
                                }
                                xmlParser.nextTag();
                                xmlParser.nextTag();
                                index++;
 
 
                                if(xmlParser.getName().equals("beacon")) {break;}
                            }
 
                        }
 
                        break;
                }
 
                eventType = xmlParser.next();
 
            }
        } catch (IOException | XmlPullParserException e) {
            e.printStackTrace();
            Log.i("TAG""exception");
        }
 
        // Map<表示名 , 表示位置> 生成
        for (int i=0; i < pointNames.size(); i++) {
            pMap.put(pointNames.get(i),positions.get(i));
        }
        return pMap;
 
    }
 
cs

'Android' 카테고리의 다른 글

Synchronize animations issue  (0) 2020.07.20
멀티스레딩 이슈 - Atomic  (0) 2020.07.15
1차 작성  (0) 2020.07.10
XML Parsing  (0) 2020.07.08
그리드레이아웃의 자식 뷰(버튼)의 속성(span)변경  (0) 2020.07.08

댓글