2017-08-09 91 views
0

我认为已经知道如何获得Json数据,其中不同的 这个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 + '\'' + 
      '}'; 
} 
} 

Duration类

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

元素的getElements().返回一个数组列表,所以你不能只是说

getElements().getDuration().getText() 

你必须指定你要访问的元素的位置你的json它只有一个元素,所以正确的格式是

getElements().get(0).getDuration().getText() 

或者你c一个使一看通过指数来获得元素;如果超过一个

而且,如果你把循环在你的JSON它返回一个JSON数组不是一个JSON对象

+0

你吧!有用!谢谢。 – juan

相关问题