Home > Net >  JSONObject is returning NULL Object
JSONObject is returning NULL Object

Time:04-11

I'm trying to draw a Route Between A Box Image and the current Location on the Google map I could diplay the Box image and the Current Location Icon Like this Picture but when I need to draw A route between them the App crash.

My Code:

        private void drawRoute(LatLng yourLocation, String address) {

        mService.getGeoCode(address).enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                try {
                        JSONObject jsonObject = new JSONObject(responses.body().toString());
                        
                        String lat = ((JSONArray) jsonObject.get("results"))
                                .getJSONObject(0)
                                .getJSONObject("geometry")
                                .getJSONObject("location")
                                .get("lat").toString();
                        String lng = ((JSONArray) jsonObject.get("results"))
                                .getJSONObject(0)
                                .getJSONObject("geometry")
                                .getJSONObject("location")
                                .get("lng").toString();
                        LatLng orderLocation = new LatLng(Double.parseDouble(lat), Double.parseDouble(lng));

                        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.box);
                        bitmap = Common.scaleBitmap(bitmap, 70, 70);

                        MarkerOptions marker = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                                .title("Order of"   Common.currentRequest.getPhone())
                                .position(orderLocation);
                        mMap.addMarker(marker);

                        //draw route
                        mService.getDirections(yourLocation.latitude   ","   yourLocation.longitude,
                                orderLocation.latitude   ","   orderLocation.longitude)
                                .enqueue(new Callback<String>() {
                                    @Override
                                    public void onResponse(Call<String> call, Response<String> response) {
                                        new ParserTask().execute(response.body().toString());
                                    }

                                    @Override
                                    public void onFailure(Call<String> call, Throwable t) {

                                    }
                                });
                    
                }
                catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });
    }

It Crash I think because it says that responses.body().toString() returns NULL.I Search A lot for A solution but didn't know how to solve this issue.

The ERROR:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ymmyserver, PID: 32071
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object retrofit2.Response.body()' on a null object reference
        at com.example.ymmyserver.TrackingOrder$1.onResponse(TrackingOrder.java:139)

The whole code on Github TrackingOrder Class:

https://github.com/zieadshabkalieh/YmmyApp/blob/main/TrackingOrder.java

CodePudding user response:

The error actually is that you can’t invoke body() on a NULL object, meaning your responses variable itself is NULL. Which is because you have a typo in there, your parameter is called response, while you are trying to access responses (mind the plural 's' at the end).

CodePudding user response:

Janik is correct, the error stems from you trying to access a property on an object that doesn't exist (NULL); I recommend play process of elimination by first debugging your API call, log the response (toString) to make sure first you are getting data, and that data does contain a body; follow up with the next part and so forth; sounds like the issue isn't with the JSONObject method but that the data you're consuming returns nothing (either nothing, or a different response than what you expect); debug it top to bottom you'll find the reason.

  • Related