【发布时间】:2018-04-12 06:07:50
【问题描述】:
在我的安卓应用中。我正在使用改造 2。我想从 api 获取 json 详细信息。响应即将到来,但 json 对象显示为空。
我正在获取 json 对象的大小。但我没有得到这些值。如何解析来自response.body 的json。
我想得到DATA_TITLE,DATA_IMAGE,DATA的值。
我是第一次使用改造。我尝试了不同的方法。请帮帮我。
我的 json 代码如下所示。所有的源代码也如下所示。
[{
"ID": {
"Tag": "string",
"Method": 5,
"Value": "68613",
"status": true
},
"DATA_TITLE": {
"Tag": "string",
"Method": 5,
"Value": "Hai aaaaaaa",
"status": true
},
"DATA_IMAGE": {
"Tag": "string",
"Method": 5,
"Value": "http://xxxxxx.com/desktopModules/Farabi.ICatalog/CatalogImages/488/C-2048_sd-eng.jpg",
"status": true
},
"DATA": {
"Tag": "string",
"Method": 5,
"Value": "",
"status": true
}
}, {
"ID": {
"Tag": "string",
"Method": 5,
"Value": "68613",
"status": true
},
"DATA_TITLE": {
"Tag": "string",
"Method": 5,
"Value": "Hai aaaaaaa",
"status": true
},
"DATA_IMAGE": {
"Tag": "string",
"Method": 5,
"Value": "http://xxxxxx.com/desktopModules/Farabi.ICatalog/CatalogImages/488/C-2048_sd-eng.jpg",
"status": true
},
"DATA": {
"Tag": "string",
"Method": 5,
"Value": "",
"status": true
}
}
]
我的 gradle 代码是
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ArrayList<List<Objects>> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<List<DataResponse>> call =apiService.getDetails(Util.TemplateName,Util.p,Util.Handler,Util.AppName,Util.Type,Util.F);
call.enqueue(new Callback<List<DataResponse>>() {
@Override
public void onResponse(Call<List<DataResponse>> call, Response<List<DataResponse>> response) {
if (response.isSuccessful()) {
String json = gson.toJson(response.body());
List<DataResponse> dataResponses = response.body();
Log.d("LOG","Response size:"+dataResponses.size());
Log.d("LOG","Response data:"+dataResponses.get(0).getDataList());
// I want to get the value of DATA_TITLE,DATA_IMAGE, DATA
}
}
@Override
public void onFailure(Call<List<DataResponse>> call, Throwable t) {
Log.e("LOG","Response error:"+t);
}
});
}
}
API接口
public interface ApiInterface {
@GET("getdetails")
Call<List<DataResponse>> getDetails(@Query("TemplateName") String TemplateName);
}
ApiClient.java
public class ApiClient {
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(Util.URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
数据响应
public class DataResponse {
private List<Objects> results;
@SerializedName("")
@Expose
private List<Objects> dataList = new ArrayList<>();
public List<Objects> getDataList() {
return dataList;
}
public List<Objects> getResults() {
return results;
}
public void setResults(List<Objects> results) {
this.results = results;
}
}
Objects.java
public class Objects {
@SerializedName("ID")
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
【问题讨论】:
-
当我更改为
Call<DataResponse>时,它显示错误是预期的 BEGIN_OBJECT 但在第 1 行第 2 列是 BEGIN_ARRAY。于是我改成了Call<List<DataResponse>> -
对不起,它应该是 List
而已。 -
使用 jsonschema2pojo.org 并正确创建我们的 Pojo。我认为只有你的 Pojo 有问题。
-
@hasan_shaikh 我已经创建了我的 pojo。然后数组也变为空。
标签: java android json retrofit retrofit2