2017-06-15 5 views
0

Ich habe Probleme mit dem Lesen von Dateien aus dem lokalen (wie von LibGdx definiert), obwohl es gut funktioniert, um es zu schreiben.LibGdx Datei (Local) nicht gefunden auf Android

Was beunruhigender ist, dass ich Dateien in einem Szenario erfolgreich lesen kann, aber in einem anderen nicht. Der erfolgreiche Weg ist, wenn ich eine Datei lesen, indem ich einen InputStream benutze, der von FileHandle erhalten wurde.

InputStream is = mapFile.read(); 

StringWriter writer = new StringWriter(); 
IOUtils.copy(is, writer, "utf-8"); 
String theString = writer.toString(); 
hash = new String(Hex.encodeHex(DigestUtils.md5(theString))); 
Gdx.app.debug(TAG, hash); 

Was nicht funktioniert ist, wenn ich versuche, eine .tmx Karte mit einem TmxLoader zu laden, wie folgt:

map = new TmxMapLoader(new LocalFileHandleResolver()).load(mapFile.path()); 

com.badlogic.gdx.utils.SerializationException: Error parsing file: /data/data/com.mycompany.myapp.android/files/Downloads/Maps/Smallwoods2 (61)/map.tmx 
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:83) 
at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:78) 
at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:65) 
at com.mycompany.myapp.game.maps.GameMap.<init>(GameMap.java:130) 
at com.mycompany.myapp.game.maps.GameMapManager.loadMap(GameMapManager.java:56) 
at com.mycompany.myapp.game.maps.GameMapManager.access$000(GameMapManager.java:15) 
at com.mycompany.myapp.game.maps.GameMapManager$1.run(GameMapManager.java:123) 
at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:452) 
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522) 
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239) 
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: /data/data/com.mycompany.myapp.android/files/Downloads/Maps/Smallwoods2 (61)/map.tmx (Local) 
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136) 
at com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:80) 
at com.badlogic.gdx.files.FileHandle.reader(FileHandle.java:163) 
at com.badlogic.gdx.utils.XmlReader.parse(XmlReader.java:81) 

ich auch in das Datenverzeichnis mit adb Shell eingegeben und überprüft, dass die Datei vorhanden ist .

Wenn ich es mit internen Dateien mache, funktioniert es auch gut.

edit: ich diese

+0

vorbei sein sollte Es ist ein Parsing-Fehler, nach dem Stack-Trace es Ihre Datei nicht gefunden, aber es funktioniert nicht, es deserialisieren –

+0

@ cedric-martens Die SerializationException wird dadurch verursacht, dass die Datei nicht gefunden wird, also welche OP-Zustände korrekt sind. OP Wie laufen Sie Ihre Anwendung? Vielleicht hat es damit zu tun, wie Sie Ihre Arbeitsrichtung festlegen. – Logain

+0

Mein Fehler, ich habe vergessen hinzuzufügen, dass ich es auf Android laufen lasse. Ich habe den gleichen Code auf dem Desktop ausgeführt, obwohl mit internen Dateien und es hat gut funktioniert. Ich habe einige andere Posts gefunden, die erwähnen, dass Sie die Android-Assets in das Arbeitsverzeichnis setzen müssen, aber ich konnte nicht sicher herausfinden, ob das auch auf Android zutreffen würde, und es scheint mir nicht notwendig zu sein, das Arbeitsverzeichnis festzulegen auf Android. Außerdem funktioniert es, eine Datei im selben Verzeichnis in einem Fall zu lesen, und diese Dateien werden sogar von derselben App geschrieben, also muss es etwas anderes geben, was ich falsch mache ... oder nicht. – simernes

Antwort

0

Ok, auf Android leite damit ich mein eigenes Problem gelöst, wie man oft der Fall ist.

Das Problem war, dass ich einen absoluten Pfad übergeben habe, aber wenn Sie einen LocalFileResolver verwenden, übergeben Sie einfach den relativen Pfad.

So war ich

vorbei
/data/data/com.mycompany.myapp.android/files/Downloads/Maps/Smallwoods2 (61)/map.tmx 

Aber ich

Downloads/Maps/Smallwoods2 (61)/map.tmx 
Verwandte Themen