首页 > 解决方案 > JSONObject(response.body().toString()) 是空对象

问题描述

我不知道为什么 response.body() 为空,这使我的应用程序崩溃,请检查代码

这是普通类

public class Common {
public static User userterkini;
public static tujuan tujuanterkini;

public static final String UPDATE = "Update";
public static final String DELETE = "Delete";
public static final int PICK_IMAGE_DI_PESAN=71;
public static final String baseUrl = "https://maps.googleapis.com";

public static kordint getgeokodeservis(){
    return retrofitclient.getClient(baseUrl).create(kordint.class);
}
public static Bitmap scalebitmap(Bitmap bitmap,int lebar,int tinggi)
{
    Bitmap scalebitmaps = Bitmap.createBitmap(lebar,tinggi,Bitmap.Config.ARGB_8888);
    float scaleX = lebar/(float)bitmap.getWidth();
    float scaleY = tinggi/(float)bitmap.getHeight();
    float pivotX=0,pivotY=0;

    Matrix scaleMatrix = new Matrix();
    scaleMatrix.setScale(scaleX,scaleY,pivotX,pivotY);

    Canvas canvas=new Canvas(scalebitmaps);
    canvas.setMatrix(scaleMatrix);
    canvas.drawBitmap(bitmap,0,0,new Paint(Paint.FILTER_BITMAP_FLAG));

    return scalebitmaps;
}
}

这是 kordnt 接口

package com.example.wsulangserver01.Remote;


public interface kordint {
@GET("maps/api/geocode/json")
Call<String> getgeokode(@Query("address")String address);

@GET("maps/api/directions/json")
Call<String>gettujuan(@Query("origin")String origin,@Query("destination")String destination);
}

这是改造客户端类

public class retrofitclient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl)
{
    if (retrofit==null)
    {
        retrofit=new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(ScalarsConverterFactory.create())
                .build();
    }
    return retrofit;
}
}

这是地图活动

private void rute(final LatLng lokasiuser, String alamat) {
    kordint.getgeokode(alamat).enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            try{
                JSONObject jsonObject=new JSONObject(response.body().toString());
                String lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                        .getJSONObject("geometri")
                        .getJSONObject("location")
                        .get("lng").toString();

                String lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                        .getJSONObject("geometri")
                        .getJSONObject("location")
                        .get("lng").toString();

                LatLng lokasipesanan = new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));


                Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.wahidin);
                bitmap = Common.scalebitmap(bitmap,70,70);

                MarkerOptions marker = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                        .title("Dikirim ke "+Common.tujuanterkini.getNotelp())
                        .position(lokasipesanan);
                mMap.addMarker(marker);

                //jalur rute
                kordint.gettujuan(lokasiuser.latitude+","+lokasiuser.longitude,lokasipesanan
                +","+lokasipesanan.latitude+","+lokasipesanan.longitude).enqueue(new Callback<String>() {
                    @Override
                        public void onResponse(Call<String> call, Response<String> response) {
                        new parser().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) {

        }
    });
    }

贝娄是错误

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String 
 java.lang.String.toString()' on a null object reference
    at com.example.wsulangserver01.Mapps$1.onResponse(Mapps.java:126)
    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7397)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:920)

我不知道我的 response.body() 上发生了什么,为什么总是 null,请帮我解决这个问题 :)

标签: javaandroidandroid-studiomapsretrofit2

解决方案


接收到 HTTP 响应时调用Retrofit onResponse文档),换句话说,也考虑 200 或 404。请用于Response.isSuccessful()检查请求是否成功,否则,只需打印错误代码和/或错误正文进行调试。


推荐阅读