java - 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,请帮我解决这个问题 :)
解决方案
接收到 HTTP 响应时调用Retrofit onResponse
(文档),换句话说,也考虑 200 或 404。请用于Response.isSuccessful()
检查请求是否成功,否则,只需打印错误代码和/或错误正文进行调试。
推荐阅读
- reactjs - 使用 webpack 将 firebase firestore 添加到 react.js 项目时出现问题
- node.js - 路由路径 Express,NodeJS 的问题
- c# - 带有 Rayib 的 Visual Studio 2019 - 在未知模块错误中发生“System.IO.FileNotFoundException”类型的未处理异常
- javascript - How make side by side div elements?
- swift - Swift mutating function struct pass struct’s variable name in function?
- django - Django - 文件名“”包含路径元素异常,名称不应该包含相对于 MEDIA_ROOT 的路径吗?
- html - CSS 网格列不按标题行的预期工作
- firebase - Dart/Flutter//“方法 'toDate' 在 null 上被调用。接收者:null 尝试调用:toDate()”
- deployment - 将 Gatsby 站点部署到 Netlify 失败,在本地工作正常 - StaticImage 有问题吗?
- r - 为什么 is.na() 在 R 中的空向量的第一个元素上返回 TRUE?