Android 如何检查RESTAPI响应中不包含图像字段?
我正在使用WordPress Rest API,因为当用户不从WordPress后端上传图像时,它不包含该字段,并且在异常错误(如org.json.JSONException:No value for thumbnail)中进行了修改。当用户上传图像时,我得到的响应是,当响应没有缩略图字段时,如何处理此问题Android 如何检查RESTAPI响应中不包含图像字段?,android,retrofit,field,response,Android,Retrofit,Field,Response,我正在使用WordPress Rest API,因为当用户不从WordPress后端上传图像时,它不包含该字段,并且在异常错误(如org.json.JSONException:No value for thumbnail)中进行了修改。当用户上传图像时,我得到的响应是,当响应没有缩略图字段时,如何处理此问题 ApiInterface apiInterface = RetrofitManager.getClient().create(ApiInterface.class); Cal
ApiInterface apiInterface = RetrofitManager.getClient().create(ApiInterface.class);
Call<JsonObject> call = apiInterface.getPost(intValue);
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
if (response.isSuccessful()) {
response.body();
try {
jsonObject = new JSONObject(response.body().toString());
Log.d("@@response", response.body().toString());
JSONObject jsonResult = jsonObject.getJSONObject("post");
String title = jsonResult.getString("title");
String expert = jsonResult.getString("excerpt");
if ( jsonResult.getString("thumbnail")== null) {
Toast.makeText(getApplicationContext(), "No Image Exist", Toast.LENGTH_SHORT).show();
Glide.with(getApplicationContext()).load(R.drawable.sikarlogo).into(imageView);
} else {
imageUrl = jsonResult.getString("thumbnail");
Glide.with(getApplicationContext()).load(imageUrl).into(imageView);
}
tvContent.setText(expert);
tvTitle.setText(title);
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("@Success", response.message());
} else {
Log.e("@NO Success", response.message());
}
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.d("@counselingError", "");
}
});
}
在某些情况下,我没有得到缩略图字段如何处理这个图像字段
最后,我这样做了:
if ( jsonResult.has("thumbnail")) {
imageUrl = jsonResult.getString("thumbnail");
Glide.with(getApplicationContext()).load(imageUrl).into(imageView);
} else {
Toast.makeText(getApplicationContext(), "No Image Exist", Toast.LENGTH_SHORT).show();
Glide.with(getApplicationContext()).load(R.drawable.sikarlogo).into(imageView);
}
试试这个方法
public String checkIfNull(JsonElement element) {
return (element instanceof JsonNull) ? "" : element.getAsString();
}
然后像这样调用这个方法
thumbnail = checkIfNull(jsonResult.getString("thumbnail")
thumbnail = jsonResult.optString("thumbnail"," ")
如果它为null,那么如果您使用的是Gson,它将为您提供空字符串
如果您使用的是JSONObject,那么您可以像下面这样使用opt进行检查
thumbnail = checkIfNull(jsonResult.getString("thumbnail")
thumbnail = jsonResult.optString("thumbnail"," ")
使用此选项检查密钥是否可用
if(jsonResult.hasKey("thumbnail"){
if ( jsonResult.getString("thumbnail")== null) {
Toast.makeText(getApplicationContext(), "No Image Exist", Toast.LENGTH_SHORT).show();
Glide.with(getApplicationContext()).load(R.drawable.sikarlogo).into(imageView);
} else {
imageUrl = jsonResult.getString("thumbnail");
Glide.with(getApplicationContext()).load(imageUrl).into(imageView);
}
}
他们有办法检查JSON对象是否有密钥,以便更好地处理这类情况
jsonResult.has("thumbnail")
如果true表示JSON有键或false JSON对象没有键,则返回true或false首先,您必须检查缩略图键是否存在
if (jsonResult.has("thumbnail")) {
String status = jsonResult.getString("thumbnail"));
}
有两种方法可以处理它- 使用has方法- 使用isNull方法- 您还可以使用optString 返回按名称映射的值(如果存在),如果存在则强制该值 必要时,如果不存在此类映射,则返回
您可以使用jsonResult.hasthumbnail检查响应是否有缩略图键,而不是编写jsonResult.getStringthumbnail==null,并根据需要执行进一步的处理。如何处理响应中没有缩略图字段的情况您已经完成了ifjsonResult.getStringthumbnail==null这不是一种工作状态正在工作并获取错误异常:Thumbnail没有值。我们可以在API级别进行修改。若未上传图像,他们可能会在缩略图字段中传递清空字符串。若未上传图像,您能否告知我们您在接收响应时面临的响应?若jsonResult.hasthumbnail{imageUrl=jsonResult.getStringthumbnail;Glide.withgetApplicationContext.loadimageUrl.intoimageView;}else{Toast.makeTextgetApplicationContext,不存在图像,Toast.LENGTH\u SHORT.show;Glide.withgetApplicationContext.loadR.drawable.sikarlogo.intoimageView;}如果您认为答案对其他人有用并且满足您的问题,请接受作为答案
if(!jsonResult.isNull("thumbnail"){
..thumnail key is not present
}