2014-11-22 16 views
10

Ho bisogno di aiuto per leggere il file json su ArrayList.LibGDX: lettura da file json a ArrayList

ho lima JSON:

[ 
    { 
     "name": "Wall", 
     "symbol": "#",  
    }, 
    { 
     "name": "Floor", 
     "symbol": ".", 
    } 
] 

ho una classe:

public class Tile { 

    public String name; 
    public String symbol; 

} 

E ho un'altra classe con ArrayList:

public class Data { 

    public static ArrayList<Tile> tilesData; 

    public static void loadData() { 
     tilesData = new ArrayList<Tile>(); 
     Json json = new Json(); 
     json.fromJson(Tile.class, Gdx.files.internal("data/tiles.json")); 
    } 

} 

ho bisogno di riempire questo ArrayList con dati dal file json, ma ho alcuni problemi. Immagino che la linea

json.fromJson(Tile.class, Gdx.files.internal("data/tiles.json")); 

è sbagliato.

quando provo a farlo funzionare c'è

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error reading file: data/tiles.json 

Caused by: com.badlogic.gdx.utils.SerializationException: Unable to convert value to required type: [ 
{ 
    name: Wall, 
    symbol: # 
}, 
{ 
    name: Floor, 
    symbol: . 
} 

Ho letto l'articolo libgdx sui file JSON, ma ho trovato poco chiaro ... Non capisco come riempire array. Per favore, aiutami con questo caso!

+0

Cosa si intende per "alcuni problemi"? Compilazione o errori di runtime? Puoi postarlo? – NiziL

+0

Ho modificato il mio post. Come so, ho sbagliato nell'analisi del file json nel mio array. – Pasha

risposta

7

Il file json ha ArrayList<Tile> memorizzato in esso e si sta tentando di leggerlo come Tile.

Ci sono due modi per rettificare questo.

1) È possibile incapsulare la raccolta di tessere in un'altra classe per semplificare la serializzazione.

2) Leggere come ArrayList e convertire il tipo più tardi.

ArrayList<JsonValue> list = json.fromJson(ArrayList.class, 
              Gdx.files.internal("data/tiles.json")); 
for (JsonValue v : list) { 
    tilesData.add(json.readValue(Tile.class, v)); 
} 

Spero che questo aiuti.

+0

Potrebbe dirmi di più su come tipizzarlo? La ringrazio per la risposta! – Pasha

+0

Ho aggiornato la risposta. Per favore controlla. –

+0

Grazie mille, ha aiutato – Pasha

7

La risposta da Tanmay Patil è giusto, ma è possibile salvare il ciclo con:

ArrayList<Tile> board = json.fromJson(ArrayList.class, Tile.class, Gdx.files.internal("data/tiles.json")); 
+0

Grazie, è molto utile aggiunta – Pasha

+0

Santa merda. Ho appena ridotto il mio codice di caricamento JSON originale da 10 righe a 1. LibGDX è piuttosto dolce. – NielW

+0

Mi sono appena imbattuto in questo post, che è in qualche modo collegato alle mie domande. Invece di leggere il file json, è possibile scrivere la stringa json (posta nella domanda originale) nel file? Vedo anche le informazioni di classe stampate nel file json serializzato, che non voglio. Il mio link alle domande: http://gamedev.stackexchange.com/questions/125307/unable-to-remove-class-information-in-serialized-json-file-using-libgdx – user2582651