为什么我得到Json的结构而不仅仅是值?

时间:2017-08-09 16:44:56

标签: android json retrofit

我认为已经了解了如何使用不同的数据获取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 + '\'' +
            '}';
}
}

1 个答案:

答案 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对象