我正在尝试使用URL获取JSON文件,但是应用程序崩溃了。
MainActivity.java
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ApiService.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService service = retrofit.create(ApiService.class);
// Logs show error is in the code below
service.getPopulationData(new Callback<Flag> (){
@Override
public void onResponse(Call<Flag> call, Response<Flag> response) {
Log.d("JSONData", response.body().toString());
}
@Override
public void onFailure(Call<Flag> call, Throwable t) {
Log.d("JSONData", t.getMessage());
}
});
ApiService.java
public interface ApiService {
String BASE_URL = "http://www.androidbegin.com/";
@GET("tutorial/jsonparsetutorial.txt")
public void getPopulationData(Callback<Flag> callback) ;
}
Flag.java
public class Flag {
private int rank;
private String country;
private String population;
private String flag;
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPopulation() {
return population;
}
public void setPopulation(String population) {
this.population = population;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
}
编辑:错误日志可以在这里找到:log
我已经尝试了在stackoverflow上提到的其他解决方案,但是我一直无法正确解决问题。
此外,我只希望JSON文件中的标志URL。我应该如何得到它?
答案 0 :(得分:1)
您将需要以下两个pojo课程
JsonResponse.java
scanf
Worldpopulation.java
public class JsonResponse {
@SerializedName("worldpopulation")
@Expose
private List<Worldpopulation> worldpopulation = null;
public List<Worldpopulation> getWorldpopulation() {
return worldpopulation;
}
public void setWorldpopulation(List<Worldpopulation> worldpopulation) {
this.worldpopulation = worldpopulation;
}
}
并进行如下所示的改装呼叫
public class Worldpopulation {
@SerializedName("rank")
@Expose
private Integer rank;
@SerializedName("country")
@Expose
private String country;
@SerializedName("population")
@Expose
private String population;
@SerializedName("flag")
@Expose
private String flag;
public Integer getRank() {
return rank;
}
public void setRank(Integer rank) {
this.rank = rank;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPopulation() {
return population;
}
public void setPopulation(String population) {
this.population = population;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
}
**** service.getPopulationData(new Callback<JsonResponse> (){
@Override
public void onResponse(Call<JsonResponse> call, Response<JsonResponse> response) {
Log.d("JSONData", response.body().toString());
ArrayList<Worldpopulation> population=new ArrayList(response.body().getWorldpopulation());
}
@Override
public void onFailure(Call<JsonResponse> call, Throwable t) {
Log.d("JSONData", t.getMessage());
}
});
****
并更改 ApiService.java
edited as per requirement
并这样称呼它 在此处进行编辑
public interface ApiService {
String BASE_URL = "http://www.androidbegin.com/";
@GET("tutorial/jsonparsetutorial.txt")
Call<JsonResponse> getPopulationData() ;
}
答案 1 :(得分:0)
您要使用Retrofit解析的json包含一个JSON数组作为其根worldpopulation
,因此首先您需要一个WorldPopulation类,如下所示:
public class WorldPopulation
{
private List<Flag> worldpopulation;
public List<Flag> getWorldpopulation() {
return worldpopulation;
}
public void setWorldpopulation(List<Flag> worldpopulation) {
this.worldpopulation = worldpopulation;
}
}
public interface ApiService {
String BASE_URL = "http://www.androidbegin.com/";
@GET("tutorial/jsonparsetutorial.txt")
public void getPopulationData(Callback<WorldPopulation> callback) ;
}