【发布时间】:2016-08-23 23:32:36
【问题描述】:
我曾经在其他帖子上寻找过这个问题,但我无法与他们一起解决。
格式化 JSON 响应:
{
"products":[
{
"name":"Top fluide doubl\u00e9",
"description":"DESCRIPTION ........"
},
{
"name":"Sweat avec fentes lat\u00e9rales",
"description":"DESCRIPTION ........"
},
{
"name":"Robe \u00e9paules d\u00e9nud\u00e9es",
"description":"DESCRIPTION ........"
},
{
"name":"Blouson bomber \u00e0 zip imprim\u00e9",
"description":"DESCRIPTION ........"
}
],
"success":4
}
改造 2 的 API
@GET("products")
Call<List<ProductTest>> getProductList();
@GET("products/{product}")
Call<ProductTest> getProduct(@Path("product") int product);
@GET("success")
Call<SuccessTest> getSuccessNb();
JAVA 产品类
public class ProductTest {
String name;
String description;
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
改造 2 构建器
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:80/App/PHP_script/reading_all_products.php/")
.addConverterFactory(GsonConverterFactory.create())
.build();
CatalogAPI service = retrofit.create(CatalogAPI.class);
正在努力获得 JSON 响应成功的服务
service.getSuccessNb().enqueue(new Callback<SuccessTest>() {
@Override
public void onResponse(Call<SuccessTest> call, Response<SuccessTest> response) {
if(response.isSuccessful())
{
Log.i("retrofit : ", "" + response.body().getSuccess());
}
else
{
Log.i("retrofit : ", "NULL BODY -> " + response.errorBody());
}
}
@Override
public void onFailure(Call<SuccessTest> call, Throwable t) {
Log.i("retrofit : ", "onFailure -> " + t.getLocalizedMessage());
}
});
无法获取产品列表或列表中的一个产品的服务
service.getProductList().enqueue(new Callback<List<ProductTest>>() {
@Override
public void onResponse(Call<List<ProductTest>> call, Response<List<ProductTest>> response) {
Log.i("retrofit : ", "pre-ok");
if(response.isSuccessful())
{
Log.i("retrofit : ", "ok");
}
else
{
Log.i("retrofit : ", "NULL BODY -> " + response.errorBody());
}
}
@Override
public void onFailure(Call<List<ProductTest>> call, Throwable t) {
Log.i("retrofit : ", "onFailure -> " + t.getLocalizedMessage());
}
});
service.getProduct(2).enqueue(new Callback<ProductTest>() {
@Override
public void onResponse(Call<ProductTest> call, Response<ProductTest> response) {
if(response.isSuccessful())
{
Log.i("retrofit : ", "" + response.message());
Log.i("retrofit : ", response.body().getName() + " => " + response.body().getDescription());
}
else
{
Log.i("retrofit : ", "NULL BODY -> " + response.errorBody());
}
}
@Override
public void onFailure(Call<ProductTest> call, Throwable t) {
Log.i("retrofit : ", "onFailure -> " + t.getLocalizedMessage());
}
});
最后两种情况显示错误:
应为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT。
我使用了一个运行良好的包装类,但我想对这种情况进行一些解释,以便完美理解 Retrofit 2 和 JSON 之间的通信
【问题讨论】:
标签: android json retrofit retrofit2