【发布时间】:2019-12-22 15:59:28
【问题描述】:
我正在使用改造和模拟 api 进行测试,我已经有一个 recyclerview,其中包含产品列表和产品的详细信息,同时单击该行,但在某些产品中,josn 是一个错误处理示例:
http://mocklab.io/product/1/
{
"success": true,
"metadata": {
"sku": "2",
"name": "Huawei P20 Pro",
"max_saving_percentage": 30,
"price": 13996,
"special_price": 7990,
"brand": "Huawei",
"rating": {
"average": 4,
"ratings_total": 265
},
但在我的情况下,产品“3”给我错误 json : http:mocklab.io/product/3/
{
"success": false,
"messages": {
"error": {
"reason": "PRODUCT_NOT_FOUND",
"message": "Product not found!"
}
}
}
pojos 已经用 jsonschema2pojo 完成了,所以问题是如果我单击 recyclerview 中的第 3 行,我的应用程序崩溃,因为我得到空对象引用,但我想要的是处理他们提出的错误: HTTP 200 - Success false ,抱歉,如果我没有以最好的方式解释自己,谢谢! 调用:
GetPhoneDataService service = RetrofitInstance.getRetrofitInstance().create(GetPhoneDataService.class);
Call<APIReponse> call = service.getAllPhones(1);
call.enqueue(new Callback<APIReponse>() {
@Override
public void onResponse(Call<APIReponse> call, Response<APIReponse> response) {
if (response.isSuccessful() && response.body() != null) {
for (Result result : response.body().getMdata().getResults()) {
phoneList.add(result);
}
adapter.setOnClickListener(new PhonesAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
String sku = phoneList.get(position).getSku();
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
intent.putExtra("sku", sku);
startActivity(intent);
}
});
adapter.notifyDataSetChanged();
} else {
try {
String error = response.errorBody().string();
if (error != null) {
Log.e("Error : ", error);
}
//show error to the user
} catch (Exception e) {
e.printStackTrace();
}
【问题讨论】: