我认为已经了解了如何使用不同的数据获取Json数据 这个Json的括号。使用我的代码,我获得了我需要的数据,但我注意到两件事。
1)为什么我不能通过getText()来指定我需要距离的文本值,因为当我编写代码时,让我进入getElements()。
2)为什么如果我显示距离的值,它给出了所有结构中所有Json从元素开始的结构,例如:[Elements {distance = Distance {text ='5.6km'}}]而不是5.6公里
持续时间也一样!
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://maps.googleapis.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiInterface apiInterface = retrofit.create(ApiInterface.class);
Call<Feed> call = apiInterface.getData();
call.enqueue(new Callback<Feed>() {
@Override
public void onResponse(Call<Feed> call, Response<Feed> response) {
Log.d(TAG, "onResponse: Server Response: "+response.toString());
Log.d(TAG, "onResponse: received information: "+ response.body().toString());
ArrayList<Rows> rowsList = response.body().getRows();
ArrayList<String> destination_addresses_list = response.body().getDestination_addresses();
for (int i=0; i<rowsList.size(); i++){
Log.d(TAG, "onResponse: \n"+
"destination_addresses: "+ destination_addresses_list.get(i)+"\n"+
// this is where I cant specify getElements().getDistance().getText()
"distance"+ rowsList.get(i).getElements()+
//And in this one too! getElements().getDuration().getText()
"duration"+ rowsList.get(i).getElements());
}
}
@Override
public void onFailure(Call<Feed> call, Throwable t) {
Log.e(TAG, "onFailure: algo paso: "+ t.getMessage());
Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show();
}
});
饲料类:
public class Feed {
@SerializedName("destination_addresses")
@Expose
private ArrayList<String> destination_addresses;
// este contiene cas datos que se pueden separar
@SerializedName("rows")
@Expose
private ArrayList<Rows> rows;
public ArrayList<String> getDestination_addresses() {
return destination_addresses;
}
public void setDestination_addresses(ArrayList<String> destination_addresses) {
this.destination_addresses = destination_addresses;
}
public ArrayList<Rows> getRows() {
return rows;
}
public void setRows(ArrayList<Rows> rows) {
this.rows = rows;
}
@Override
public String toString() {
return "Feed{" +
"destination_addresses=" + destination_addresses +
", rows=" + rows +
'}';
}
}
行类
public class Rows {
@SerializedName("elements")
@Expose
private ArrayList<Elements> elements;
public ArrayList<Elements> getElements() {
return elements;
}
public void setElements(ArrayList<Elements> elements) {
this.elements = elements;
}
@Override
public String toString() {
return "Rows{" +
"elements=" + elements +
'}';
}
}
元素类
public class Elements {
@SerializedName("distance")
@Expose
private Distance distance;
@SerializedName("duration")
@Expose
private Duration duration;
public Distance getDistance() {
return distance;
}
public void setDistance(Distance distance) {
this.distance = distance;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
@Override
public String toString() {
return "Elements{" +
"distance=" + distance +
// ", duration=" + duration +
'}';
}
}
距离等级
public class Distance {
@SerializedName("text")
@Expose
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "Distance{" +
"text='" + text + '\'' +
'}';
}
}
持续时间等级
public class Duration {
@SerializedName("text")
@Expose
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "Duration{" +
"text='" + text + '\'' +
'}';
}
}
答案 0 :(得分:0)
class DataSource {
getElementAtIndex (index) {
return { key: index }
}
}
const data = new DataSource()
function getItem (data, index) {
return data.getElementAtIndex(index)
}
function getItemCount (data) {
return 1000
}
const ComponentView = (props) => {
return (
<VirtualizedList
data={data}
style={{backgroundColor: 'red'}}
// initialNumToRender={20}
// maxToRenderPerBatch={}
// windowSize={21}
getItemCount={getItemCount}
getItem={getItem}
keyExtractor={(item, index) => {
return item.key
}}
renderItem={({ item, index }) => {
return (
<View style={{height: 50, backgroundColor: 'yellow'}}>
<Text>{item.key}</Text>
</View>
)
}}
/>
)
}
返回元素的数组列表,所以你不能只说
getElements().
你必须在你的json中指定你试图访问的元素的位置,它只有一个元素,所以正确的格式是
getElements().getDuration().getText()
或者你可以通过索引来查看元素,如果它们是多个
并且如果你在你的json上循环它返回一个json数组而不是一个json对象