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<String, String> 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<String, String> 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 |
댓글