Android 如何检查RESTAPI响应中不包含图像字段?

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

我正在使用WordPress Rest API,因为当用户不从WordPress后端上传图像时,它不包含该字段,并且在异常错误(如org.json.JSONException:No value for thumbnail)中进行了修改。当用户上传图像时,我得到的响应是,当响应没有缩略图字段时,如何处理此问题

    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
    }