【发布时间】:2018-08-23 10:27:55
【问题描述】:
我正在使用改造实现 json 解析,但我没有从 url 得到任何响应。 Json 数据是数组的形式,里面有对象。我试图在 TextView 中设置来自 Url 的响应。我已经实现如下:
我的JSON结构如下:
[{
"id": "2",
"name": "Nbn",
"code": "001",
"ecozone": "ter",
"devregion": "east"
},
{
"id": "3",
"name": "hari",
"code": "002",
"ecozone": "hill",
"devregion": "west"
}
]
API 服务
public interface ApiService {
@GET("/data_new.php?q=district")
Call<District> getMyJSON();
}
改造客户端
public class RetrofitClient {
private static final String url = "url/";
private static Retrofit getRetrofitInstance() {
OkHttpClient client=new OkHttpClient();
return new Retrofit.Builder()
.baseUrl(url)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static ApiService getApiService(){
return getRetrofitInstance().create(ApiService.class);
}
}
我的 ModelDto 类
public class DistrictDTO {
@SerializedName("id")
@Expose
String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@SerializedName("name")
@Expose
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@SerializedName("code")
@Expose
String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@SerializedName("ecozone")
@Expose
String ecozone;
public String getEcozone() {
return ecozone;
}
public void setEcozone(String ecozone) {
this.ecozone = ecozone;
}
@SerializedName("devregion")
@Expose
String devregion;
public String getDevregion() {
return devregion;
}
public void setDevregion(String devregion) {
this.devregion = devregion;
}
}
区DTO
public class District {
public ArrayList<DistrictDTO> districtDTOS;
public ArrayList<DistrictDTO> getDistrictDTOS() {
return districtDTOS;
}
public void setDistrictDTOS(ArrayList<DistrictDTO> districtDTOS) {
this.districtDTOS = districtDTOS;
}
}
和活动
public class DistrictActivity extends AppCompatActivity {
private ArrayList<DistrictDTO> district;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_district);
district = new ArrayList<>();
textView = (TextView) findViewById(R.id.textVi);
ApiService api = RetrofitClient.getApiService();
retrofit2.Call<District> call = api.getMyJSON();
call.enqueue(new Callback<District>() {
@Override
public void onResponse(retrofit2.Call<District> call, Response<District> response) {
if (response.isSuccessful()) {
//got successfully
district = response.body().getDistrictDTOS();
Log.e("Respose", "" + district);
textView.setText(response.body().getDistrictDTOS().toString());
}
}
@Override
public void onFailure(retrofit2.Call<District> call, Throwable t) {
t.fillInStackTrace();
}
});
}
}
【问题讨论】:
-
它应该是数组,您将对象作为响应...调用数组或列表
-
你能解释一下怎么做吗? @SantanuSur
-
在您的
District类中将您的ArrayList<DistrictDTO>更改为List<DistrictDTO> -
附加提示:如果类字段被准确命名为键,则不需要
@SerializedName;) -
@Nbn 尝试从您的端点获取数组而不是对象,请参阅下面的答案