Używam WordPress Rest API w tym sensie, że Kiedy użytkownik nie przesyła obrazu z zaplecza WordPress, nie zawiera tego pola i modernizacja przebiega z błędem wyjątku, takim jak org.json.JSONException: Brak wartości dla miniatury, gdy użytkownik przesyła obraz, niż otrzymuję odpowiedź jak sobie z tym poradzić, gdy odpowiedź nie ma pola miniatury

    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", "");
        }
    });

I taką odpowiedź otrzymuję:

{
"status": "ok",
"post": {
    "id": 16,
    "type": "post",
    "slug": "%e0%a4%95%e0%a4%bf%e0%a4%a1%e0%a4%bc%e0%a4%9c%e0%a4%bc%e0%a5%80-%e0%a4%b8%e0%a5%80%e0%a4%95%e0%a4%b0-%e0%a4%ae%e0%a5%87%e0%a4%82-%e0%a4%ae%e0%a4%a8%e0%a4%be%e0%a4%af%e0%a4%be-%e0%a4%ac%e0%a4%be",
    "url": "https://sikarsandesh.com/index.php/2019/11/19/%e0%a4%95%e0%a4%bf%e0%a4%a1%e0%a4%bc%e0%a4%9c%e0%a4%bc%e0%a5%80-%e0%a4%b8%e0%a5%80%e0%a4%95%e0%a4%b0-%e0%a4%ae%e0%a5%87%e0%a4%82-%e0%a4%ae%e0%a4%a8%e0%a4%be%e0%a4%af%e0%a4%be-%e0%a4%ac%e0%a4%be/",
    "status": "publish",
    "title": "किड़ज़ी सीकर में मनाया बालदिवस।",
    "title_plain": "किड़ज़ी सीकर में मनाया बालदिवस।",
    "content": "",
    "excerpt": "सीकर के किड़ज़ी स्कूल में बाल दिवस को हर्षोल्लास के साथ मनाया गया। इस अवसर पर बच्चों ने विभिन्न मनोरंजक और खेल-कूद की गतिविधियों में भाग लिया जैसे म्यूज़िकल चेयर, बलून रेस, जलेबी रेस, फ़्री डाँस आदि। बच्चों को स्कूल की और से उपहार भी भेंट किए गए तथा उन्हें पंडित जवाहरलाल नेहरू के जीवन &hellip;",
    "date": "2019-11-19 10:32:55",
    "modified": "2019-11-19 10:34:46",
    "categories": [],
    "tags": [],
    "author": {
        "id": 2,
        "slug": "adminsikarsandesh-com",
        "name": "admin@sikarsandesh.com",
        "first_name": "",
        "last_name": "",
        "nickname": "admin@sikarsandesh.com",
        "url": "",
        "description": ""
    },
    "comments": [],
    "attachments": [
        {
            "id": 17,
            "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg.jpg",
            "slug": "sikarimg",
            "title": "sikarimg",
            "description": "",
            "caption": "",
            "parent": 16,
            "mime_type": "image/jpeg",
            "images": {
                "full": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg.jpg",
                    "width": 960,
                    "height": 640
                },
                "thumbnail": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-150x150.jpg",
                    "width": 150,
                    "height": 150
                },
                "medium": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-300x200.jpg",
                    "width": 300,
                    "height": 200
                },
                "medium_large": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-768x512.jpg",
                    "width": 768,
                    "height": 512
                },
                "woohoo-small": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-104x74.jpg",
                    "width": 104,
                    "height": 74
                },
                "woohoo-large": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-850x491.jpg",
                    "width": 850,
                    "height": 491
                },
                "woohoo-full": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-960x540.jpg",
                    "width": 960,
                    "height": 540
                },
                "woohoo-widget": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-320x220.jpg",
                    "width": 320,
                    "height": 220
                },
                "bdaia-carousel": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-309x330.jpg",
                    "width": 309,
                    "height": 330
                },
                "bdaia-gallery-grid": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-850x567.jpg",
                    "width": 850,
                    "height": 567
                },
                "bdaia-gr1": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-742x490.jpg",
                    "width": 742,
                    "height": 490
                },
                "bdaia-gr2": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-496x244.jpg",
                    "width": 496,
                    "height": 244
                },
                "bdaia-gr3": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-618x260.jpg",
                    "width": 618,
                    "height": 260
                },
                "bdaia-gr4": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-413x244.jpg",
                    "width": 413,
                    "height": 244
                },
                "bdaia-small": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-104x74.jpg",
                    "width": 104,
                    "height": 74
                },
                "bdaia-large": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-850x491.jpg",
                    "width": 850,
                    "height": 491
                },
                "bdaia-full": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-960x540.jpg",
                    "width": 960,
                    "height": 540
                },
                "bdaia-widget": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-320x220.jpg",
                    "width": 320,
                    "height": 220
                },
                "bdaia-block11": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-384x220.jpg",
                    "width": 384,
                    "height": 220
                },
                "woocommerce_thumbnail": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-300x300.jpg",
                    "width": 300,
                    "height": 300
                },
                "woocommerce_single": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-600x400.jpg",
                    "width": 600,
                    "height": 400
                },
                "woocommerce_gallery_thumbnail": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-100x100.jpg",
                    "width": 100,
                    "height": 100
                },
                "shop_catalog": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-300x300.jpg",
                    "width": 300,
                    "height": 300
                },
                "shop_single": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-600x400.jpg",
                    "width": 600,
                    "height": 400
                },
                "shop_thumbnail": {
                    "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-100x100.jpg",
                    "width": 100,
                    "height": 100
                }
            }
        }
    ],
    "comment_count": 0,
    "comment_status": "open",
    "thumbnail": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-150x150.jpg",

        "shop_thumbnail": {
            "url": "https://sikarsandesh.com/wp-content/uploads/2019/11/sikarimg-100x100.jpg",
            "width": 100,
            "height": 100
        }
    }
},

}

W niektórych przypadkach pole miniatury nie jest wyświetlane, jak obsługiwać to pole obrazu

W końcu zrobiłem tak:

                    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);
                    }
1
bugfreerammohan 20 listopad 2019, 08:40
Jak postępować, gdy w odpowiedzi nie otrzymuję pola miniatury
 – 
bugfreerammohan
20 listopad 2019, 08:40
Już to zrobiłeś if(jsonResult.getString("thumbnail")== null)
 – 
Mohammed Farhan
20 listopad 2019, 08:46
To nie działa
 – 
bugfreerammohan
20 listopad 2019, 08:47
Jeden warunek działa i pojawia się wyjątek błędu: brak wartości dla miniatury
 – 
bugfreerammohan
20 listopad 2019, 08:49
Czy moglibyśmy dokonać modyfikacji na poziomie API. Mogą przekazać pusty ciąg w polu miniatury, jeśli obraz nie zostanie przesłany. Czy możesz dać nam znać, jeśli obraz nie zostanie przesłany Czy stoisz przed otrzymaniem odpowiedzi?
 – 
Aditi
20 listopad 2019, 08:49

6 odpowiedzi

Użyj tego, aby sprawdzić, czy klucz jest dostępny, czy nie

 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);

                }

 }
1
mehul chauhan 20 listopad 2019, 08:50
If (jsonResult.has ("thumbnail")) {imageUrl = jsonResult.getString ("thumbnail"); Glide.with (getApplicationContext ()). Load (imageUrl) .into (imageView); } else {Toast.makeText (getApplicationContext (), "Brak obrazu", Toast.LENGTH_SHORT) .show (); Glide.with (getApplicationContext ()). Load (R.drawable.sikarlogo) .into (imageView); }
 – 
bugfreerammohan
20 listopad 2019, 08:52

Mają sposób, aby sprawdzić, czy obiekt JSON ma klucz, czy nie, w celu lepszej obsługi tego rodzaju przypadków.

jsonResult.has("thumbnail") 

Zwróci to wartość prawda lub fałsz, jeśli prawda oznacza, że JSON ma klucz lub fałsz Obiekt JSON nie ma klucza

1
Damodhar 20 listopad 2019, 08:51

Przede wszystkim musisz sprawdzić, czy klucz „miniatura” istnieje, czy nie

 if (jsonResult.has("thumbnail")) {
String status = jsonResult.getString("thumbnail"));
}
1
MurugananthamS 20 listopad 2019, 08:54
Jeśli uważasz, że odpowiedź jest przydatna dla innych i spełniasz swoje pytanie, uprzejmie przyjmij ją jako odpowiedź
 – 
MurugananthamS
20 listopad 2019, 09:56

Możesz sobie z tym poradzić na dwa sposoby -

Korzystanie z metody has-

    if(jsonResult.has("thumbnail"){
    ..your logic
    }

Korzystanie z metody isNull-

    if(!jsonResult.isNull("thumbnail"){
    ..thumnail key is not present
    }

Możesz także użyć optString metoda

Zwraca wartość mapowaną według nazwy, jeśli istnieje, wymuszając ją, jeśli to konieczne, lub awaryjną, jeśli takie mapowanie nie istnieje.

1
Kartik Shandilya 20 listopad 2019, 08:55

Wypróbuj tę metodę

public String checkIfNull(JsonElement element) {
        return (element instanceof JsonNull) ? "" : element.getAsString();
    }

I nazwij tę metodę w ten sposób

thumbnail = checkIfNull(jsonResult.getString("thumbnail")

Jeśli ma wartość null, zwróci pusty ciąg, jeśli używasz Gson

A jeśli używasz JSONObject , możesz to sprawdzić za pomocą opt w ten sposób

thumbnail = jsonResult.optString("thumbnail"," ")
1
AbhayBohra 20 listopad 2019, 12:20

Zamiast pisać jsonResult.getString("thumbnail") == null możesz sprawdzić, czy odpowiedź ma klucz miniatury, czy nie, używając jsonResult.has("thumbnail") i wykonać dalsze przetwarzanie zgodnie z potrzebami.

1
Trần Đức Tâm 20 listopad 2019, 10:25