2017-01-04 18 views
0

getterメソッドを呼び出すための配列 "rate"の値を取得する方法はありますか?GSONを使用してJSONを解析する方法は?

私のJsonの応答は以下のようなもので、GSONを使用して解析する方法を混同しています。 GSONを使ってどのように解析するのか、以下のことを見てください。

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" 
     } 
    ] 
    } 
} 
} 

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

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それを正しく行うにはどのような値 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 

    } 

} 

を取得しよう

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; 
} 

} 

答えて

1

各ループの構文が正しくありません。さておき、あなたはすべてを逆参照する前に、null値のチェックを検討すべきであるとして

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

:あなたは料金のオブジェクトのリストをループしようとしているので、resの種類は速度、料金のではないリストでなければなりませんこれらの子オブジェクトは、実行時にNullPointerExceptionをスローする危険性があります。

関連する問題