2017-01-04 6 views
0

Wie erhalten Wert im Array "Rate" Getter Methoden aufzurufen?Wie kann JSON mit GSON analysiert werden?

Meine JSON-Antwort ist etwas wie unten und verwirrt, wie es mit GSON zu analysieren. Bitte schauen Sie auf das Folgende und führen Sie mich, wie ich es mit GSON analysieren kann.

data.json

{ 
"query":{ 
    "count":2, 
    "created":"2017-01-03T12:45:19Z", 
    "lang":"en-us", 
    "results":{ 

     "rate":[ 
     { 
      "id":"BTC/USD", 
      "Name":"BTCUSD", 
      "Rate":"985.50", 
      "Date":"1/3/2017", 
      "Time":"10:35am", 
      "Ask":"985.50", 
      "Bid":"985.35" 
     }, 
     { 
      "id":"BTC/EUR", 
      "Name":"BTCEUR", 
      "Rate":"973.16", 
      "Date":"1/3/2017", 
      "Time":"10:35am", 
      "Ask":"973.16", 
      "Bid":"973.10" 
     } 
    ] 
    } 
} 
} 

I-Klassen verwenden auseinander

Market.java

public class Market { 

    @SerializedName("query") 
    private Query query; 

public Query getQuery() { 
    return query; 
} 

public void setQuery(Query query) { 
    this.query = query; 
} 

} 

Query.java

public class Query { 

    @SerializedName("count") 
    private Integer count; 
    @SerializedName("created") 
    private String created; 
    @SerializedName("lang") 
    private String lang; 
    @SerializedName("results") 
    private Results results; 

    public Integer getCount() { 
    return count; 
    } 

    public void setCount(Integer count) { 
     this.count = count; 
    } 

    public String getCreated() { 
    return created; 
    } 

    public void setCreated(String created) { 
     this.created = created; 
    } 

    public String getLang() { 
    return lang; 
    } 

    public void setLang(String lang) { 
    this.lang = lang; 
    } 

    public Results getResults() { 
    return results; 
    } 

    public void setResults(Results results) { 
    this.results = results; 
    } 

} 

Rate.java

zu analysieren
public class Rate { 

@SerializedName("id") 
private String id; 
@SerializedName("Name") 
private String name; 
@SerializedName("Rate") 
private String rate; 
@SerializedName("Date") 
private String date; 
@SerializedName("Time") 
private String time; 
@SerializedName("Ask") 
private String ask; 
@SerializedName("Bid") 
private String bid; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public String getName() { 
return name; 
} 

public void setName(String name) { 
this.name = name; 
} 

public String getRate() { 
return rate; 
} 

public void setRate(String rate) { 
this.rate = rate; 
} 

public String getDate() { 
return date; 
} 

public void setDate(String date) { 
this.date = date; 
} 

public String getTime() { 
return time; 
} 

public void setTime(String time) { 
this.time = time; 
} 

public String getAsk() { 
return ask; 
} 

public void setAsk(String ask) { 
this.ask = ask; 
} 

public String getBid() { 
return bid; 
} 

public void setBid(String bid) { 
this.bid = bid; 
} 

} 

Results.java

public class Results { 

@SerializedName("rate") 
private List<Rate> rate = null; 

public List<Rate> getRate() { 
return rate; 
} 

public void setRate(List<Rate> rate) { 
this.rate = rate; 
} 

} 

Der Versuch, die Werte Main.java

public class Main { 

    /* ..... */ 
    Gson gson = new Gson(); 
    Market market = gson.fromJson(json, Market.class); 
    //error: incompatible types: Rate cannot be converted to List<Rate> 
    for(List<Rate> res : market.getQuery().getResults().getRate()); 
    { 
     Log.v(LOG_TAG, res); // error: cannot find symbol variable res 

    } 

} 

zu bekommen, wie es richtig zu machen?

Antwort

1

Die Syntax Ihrer für jede Schleife ist falsch. Da Sie eine Schleife durch eine Liste der Rate Objekte versuchen, sollte die Art von res eine Rate sein, nicht eine Liste von Preisen:

for (Rate res : market.getQuery().getResults().getRate()) { 
    // code here 
} 

Als Nebenwirkung, sollten Sie die Überprüfung für Nullwerte prüfen, bevor alle dereferencing Diese untergeordneten Objekte laufen Gefahr, zur Laufzeit eine NullPointerException auszulösen.