- Forum-Beiträge: 206
07.09.2013, 11:26:53 via App
07.09.2013 11:26:53 via App
Ich versuche gerade, einen String (FileInputStream mit xml-file) zu parsen. In meiner anderen App habe ich den xmlResourceParser benutzt. Da diese Datei jedoch nicht im Resource-Verzeichnis ist, kann ich diesen nicht nutzen. Ich habe deshalb den XmlPullParser genutzt, doch die App stürzt mit Exception.getMessage() == null ab.
elemName ist soweit och weiß null und das system stürzt beim Versuch ab, xpa.getAttributeIntValue() zu erhalten.
Ich weiß nicht, was an diesen Codes falsch ist. Danke im Voraus für Antworten
Codes:
Mein Parser:
2
3import android.content.*;
4import android.graphics.*;
5import android.util.*;
6import android.widget.*;
7import java.io.*;
8import java.util.*;
9import org.xmlpull.v1.*;
10
11public class SceneParser
12{
13
14 public static final String namespace = "http://rpgview.ab.de";
15
16 private ArrayList<RPGObject> objects;
17 private ArrayList<RPGObject> overlayObjects;
18 private ArrayList<RPGObject> autoOverlayObjects;
19 private ArrayList<RPGObject> actions;
20 private ArrayList<RPGObject> imports;
21 private RPGObject scene;
22 private String playerRes;
23 private String dir;
24
25 private Context c;
26 private float fieldSize;
27 private String projectPath;
28
29[...]
30
31 public void parseForView(String xml, Context c, float fieldSize) throws XmlPullParserException, IOException
32 {
33 objects = new ArrayList<RPGObject>();
34 overlayObjects = new ArrayList<RPGObject>();
35 autoOverlayObjects = new ArrayList<RPGObject>();
36 actions = new ArrayList<RPGObject>();
37 scene = new RPGObject();
38
39 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
40 //factory.setNamespaceAware(true);
41 XmlPullParser xpp = factory.newPullParser();
42 xpp.setInput(new StringReader(xml));
43 //xpp.next();
44 int eventType = xpp.getEventType();
45 while(eventType != XmlPullParser.END_DOCUMENT) {
46 if(eventType == XmlPullParser.START_TAG) {
47 String elemName = xpp.getName();
48
49 XmlPullAttributes xpa = new XmlPullAttributes(xpp);
50
51 if(elemName.equals("scene")) {
52 scene.setWidth(xpa.getAttributeIntValue(namespace, "width", 1));
53 scene.setHeight(xpa.getAttributeIntValue(namespace, "height", 1));
54 scene.setGraphic(xpa.getAttributeValue(namespace, "graphic"));
55 scene.setBigScaled(xpa.getAttributeBooleanValue(namespace, "bigScaled", false));
56 playerRes = xpp.getAttributeValue(namespace, "player");
57 dir = xpp.getAttributeValue(namespace, "direction");
58
59 if(scene.isBigScaled()) {
60 scene.setImage(Bitmap.createScaledBitmap(BitmapFactory.decodeFile(projectPath + File.separator + "graphics" + File.separator + scene.getGraphic() + ".png"), Math.round(scene.getWidth() * fieldSize), Math.round(scene.getHeight() * fieldSize), true));
61 } else {
62 Bitmap bmp = BitmapFactory.decodeFile(projectPath + File.separator + "graphics" + File.separator + scene.getGraphic() + ".png");
63 bmp = Bitmap.createScaledBitmap(bmp, Math.round(fieldSize), Math.round(fieldSize), true);
64 scene.setImage(bmp);
65 }
66 } else if(elemName.equals("object")) {
67 RPGObject o = new RPGObject();
68 o.setWidth(xpa.getAttributeIntValue(namespace, "width", 1));
69 o.setHeight(xpa.getAttributeIntValue(namespace, "height", 1));
70 o.setStartX(xpa.getAttributeIntValue(namespace, "startX", 1));
71 o.setStartY(xpa.getAttributeIntValue(namespace, "startY", 1));
72 o.setGraphic(xpa.getAttributeValue(namespace, "graphic"));
73 o.setBigScaled(xpa.getAttributeBooleanValue(namespace, "bigScaled", false));
74 o.setAccessible(xpa.getAttributeBooleanValue(namespace, "accessible", true));
75 o.setAccessibleTop(xpa.getAttributeBooleanValue(namespace, "accessibleTop", true));
76 o.setAccessibleLeft(xpa.getAttributeBooleanValue(namespace, "accessibleLeft", true));
77 o.setAccessibleRight(xpa.getAttributeBooleanValue(namespace, "accessibleRight", true));
78 o.setAccessibleBottom(xpa.getAttributeBooleanValue(namespace, "accessibleBottom", true));
79
80 if(o.isBigScaled()) {
81 o.setImage(Bitmap.createScaledBitmap(BitmapFactory.decodeFile(projectPath + File.separator + "graphics" + o.getGraphic() + ".png"), Math.round(o.getWidth() * fieldSize), Math.round(o.getHeight() * fieldSize), true));
82 } else {
83 Bitmap bmp = BitmapFactory.decodeFile(projectPath + File.separator + "graphics" + File.separator + o.getGraphic() + ".png");
84 bmp = Bitmap.createScaledBitmap(bmp, Math.round(fieldSize), Math.round(fieldSize), true);
85 o.setImage(bmp);
86 }
87
88 objects.add(o);
89 }
90 eventType = xpp.next();
91 }
92 }
93
94 public static class XmlPullAttributes implements AttributeSet {
95
96 public XmlPullAttributes(XmlPullParser parser) {
97 mParser = parser;
98 }
99
100[...]
101//uses XmlUtils for getters
Meine TestFile:
2<scene xmlns:rpg="http://rpgview.ab.de"
3 rpg:width="100"
4 rpg:height="40"
5 rpg:graphic="wiese"
6 rpg:player="player_mask"
7 rpg:direction="right" >
8
9 <object
10 rpg:width="8"
11 rpg:height="40"
12 rpg:startX="-7"
13 rpg:graphic="wiese" />
14
15</scene>
Mein Test-Parser:
ScenesEditor.path ist der Pfad zur File.
FileUtils.Reader.read(String path) liest die Datei problemlos.
2 try {
3 sp.parseForView(FileUtils.Reader.read(ScenesEditor.path), c, fieldSize);
4 } catch(Exception e) {
5
6 }
XmlUtils:
https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/util/XmlUtils.java
— geändert am 07.09.2013, 15:17:08
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.