android - java.lang.NullPointerException : Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference 异常

标签 android json gson

我试图在 GSON 库的帮助下以 JSON 格式封装我的数据(经度、纬度、路线、时间戳),以便在 60 秒后发送到服务器。目前我收到以下错误 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference。我正在将这些变量(pLong、pLat、路由、格式化)显示在 xml 文件中。

感谢任何帮助。

错误:

04-21 23:15:02.893: E/AndroidRuntime(685): FATAL EXCEPTION: main
04-21 23:15:02.893: E/AndroidRuntime(685): Process: com.bustracker, PID: 685
04-21 23:15:02.893: E/AndroidRuntime(685): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg=0x4000010 } in com.bustracker.MainActivity$BroadcastReceiverListener@2d9405c7
04-21 23:15:02.893: E/AndroidRuntime(685):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:933)
04-21 23:15:02.893: E/AndroidRuntime(685):  at android.os.Handler.handleCallback(Handler.java:739)
04-21 23:15:02.893: E/AndroidRuntime(685):  at android.os.Handler.dispatchMessage(Handler.java:95)
04-21 23:15:02.893: E/AndroidRuntime(685):  at android.os.Looper.loop(Looper.java:145)
04-21 23:15:02.893: E/AndroidRuntime(685):  at android.app.ActivityThread.main(ActivityThread.java:5944)
04-21 23:15:02.893: E/AndroidRuntime(685):  at java.lang.reflect.Method.invoke(Native Method)
04-21 23:15:02.893: E/AndroidRuntime(685):  at java.lang.reflect.Method.invoke(Method.java:372)
04-21 23:15:02.893: E/AndroidRuntime(685):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
04-21 23:15:02.893: E/AndroidRuntime(685):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
04-21 23:15:02.893: E/AndroidRuntime(685): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
04-21 23:15:02.893: E/AndroidRuntime(685):  at com.bustracker.MainActivity$BroadcastReceiverListener.parse_SSID(MainActivity.java:218)
04-21 23:15:02.893: E/AndroidRuntime(685):  at com.bustracker.MainActivity$BroadcastReceiverListener.onReceive(MainActivity.java:172)
04-21 23:15:02.893: E/AndroidRuntime(685):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:923)
04-21 23:15:02.893: E/AndroidRuntime(685):  ... 8 more

数据类:

public class Data {
    double longitude;
    double latitude;
    //int speed;
    String time;
    int route;

    public Data(double longitude, double latitude, String time,
            int route) {
        super();
        this.longitude = longitude;
        latitude = latitude;
        //this.speed = speed;
        this.time = time;
        this.route = route;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        latitude = latitude;
    }

//  public int getSpeed() {
//      return speed;
//  }
//
//  public void setSpeed(int speed) {
//      this.speed = speed;
//  }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public int getRoute() {
        return route;
    }

    public void setRoute(int route) {
        this.route = route;
    }

}

DataSerializer 类:

import java.lang.reflect.Type;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class DataSerializer implements JsonSerializer<Data> {

    @Override
    public JsonElement serialize(Data data, Type arg1,
            JsonSerializationContext arg2) {
         JsonObject result = new JsonObject();
         result.add("longitude", new JsonPrimitive(data.getLongitude()));
         result.add("latitude", new JsonPrimitive(data.getLatitude()));
        // result.add("speed", new JsonPrimitive(data.getSpeed()));
         result.add("formatted", new JsonPrimitive(data.getTime()));
         result.add("route", new JsonPrimitive(data.getRoute()));
        return result;
    }

}

这部分在MainActivity中:

public class MainActivity extends ActionBarActivity {
    double pLong;
    double pLat;
    String formatted;
    int route_number;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Data d = new Data(pLong, pLat, formatted,route_number);
        Gson gson = new GsonBuilder().registerTypeAdapter(Data.class, new DataSerializer()).create();
        System.out.println(gson.toJson(d));
  }
}

最佳答案

您的 time 变量为空。如果你将它放在 DataSerializer

JsonObject 中,你应该初始化它
formatted = "13.10.2015";
Data d = new Data(pLong, pLat, formatted,route_number);

关于android - java.lang.NullPointerException : Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783027/

相关文章:

android - 阻止文本在网址的句点上拆分为多行

java - 构建opencv失败

java - 在定义到方法中的类上使用 Gson 返回 null

java - GSON 序列化非常非常慢

java - 如何使用多个同名的 JSON 字段

Android NDK Android.mk 在 Android Studio 2.3.2 中的位置

android - 在垂直方向的 LinearLayout 中将 TextView 和 EditText 左对齐

java - Spark 获取嵌套 json 的列名

java - 我们可以重用 Gson 对象吗?

c# - REST Api 为同一对象返回不同的对象名称,如何使用 RestSharp 处理?