Android将对象转换为JSON格式,GSON无法正常工作

时间:2013-02-27 14:43:11

标签: android json gson

我正在尝试使用GSON将对象转换为JSON格式。然后我将把JSON发送到用php编写的web服务。不幸的是由于某种原因,方法gson.toJson(对象)不起作用。

我有这个java对象 - 干预(它包含几个字段String,Date,Time和bitmaps的字段)。当我尝试这样做时:

Gson gson = new Gson();
String json = gson.toJson(intervention);

我在gson变量中得到了这个:

  

GSON = {serializeNulls:falsefactories:[出厂[类型= com.google.gson.JsonElement,适配器= com.google.gson.internal.bind.TypeAdapters $ 25 @ 40fbe5c8]   com.google.gson.internal.bind.ObjectTypeAdapter$1@411b7db8,   厂[类型= java.lang.String中,适配器= com.google.gson.internal.bind.TypeAdapters $ 13 @ 40ff42d0]   工厂[类型= java.lang.Integer中+ INT,适配器= com.google.gson.internal.bind.TypeAdapters $ 7 @ 411c00f8]   工厂[类型= java.lang.Boolean的+布尔值,适配器= com.google.gson.internal.bind.TypeAdapters $ 3□411b4798]   工厂[类型= java.lang.Byte中+字节,适配器= com.google.gson.internal.bind.TypeAdapters 5 $ @ 4122dbd0]   Factory [type = java.lang.Short + short,adapter = com.google.gson.internal.bind.TypeAdapters $ 6 @ 4122a0c8],Factory [type = java.lang.Long + long,adapter = com.google.gson。 internal.bind.TypeAdapters$8@40fc5d98]   工厂[类型= java.lang.Double中+双,适配器= com.google.gson.Gson $ 4 @ 412295f0]   工厂[类型= java.lang.Float中+浮动,适配器= com.google.gson.Gson $ 5 @ 41229898],   厂[类型= java.lang.Number中,适配器= @ 41223618 com.google.gson.internal.bind.TypeAdapters $ 11]   Factory [type = java.lang.Character + char,adapter = com.google.gson.internal.bind.TypeAdapters $ 12 @ 41224168],Factory [type = java.lang.StringBuilder,adapter = com.google.gson.internal。 bind.TypeAdapters$16@411a7550]   厂[类型= java.lang.StringBuffer中,适配器= com.google.gson.internal.bind.TypeAdapters $ 17 @ 411a7790]   厂[类型= java.math.BigDecimal中,适配器= com.google.gson.internal.bind.TypeAdapters $ 14 @ 40ff4568]   厂[类型= java.math.BigInteger中,适配器= com.google.gson.internal.bind.TypeAdapters $ 15 @ 411b4440]   厂[类型= java.net.URL中,适配器= com.google.gson.internal.bind.TypeAdapters $ 18 @ 411be338]   厂[类型= java.net.URI中,适配器= com.google.gson.internal.bind.TypeAdapters $ @ 19日41229028]   厂[类型= java.util.UUID中,适配器= com.google.gson.internal.bind.TypeAdapters $ 21 @ 411a2200]   厂[类型= java.util.Locale中,适配器= com.google.gson.internal.bind.TypeAdapters $ 24 @ 411a2510]   厂[typeHierarchy = java.net.InetAddress中,适配器= com.google.gson.internal.bind.TypeAdapters $ 20□41229328]   厂[类型= java.util.BitSet中,适配器= com.google.gson.internal.bind.TypeAdapters $ -2 @ 411ca140]   com.google.gson.internal.bind.DateTypeAdapter$1@412024f8,   工厂[类型= java.util.Calendar中+ java.util.GregorianCalendar中,适配器= com.google.gson.internal.bind.TypeAdapters $ 23 @ 411bef70]   com.google.gson.internal.bind.TimeTypeAdapter$1@41229920,   com.google.gson.internal.bind.SqlDateTypeAdapter$1@411b67c0,   com.google.gson.internal.bind.TypeAdapters$22@411a2500,   com.google.gson.internal.bind.ArrayTypeAdapter$1@41222e90,   com.google.gson.internal.bind.TypeAdapters$26@411b7ca0,   厂[类型= java.lang.Class中,适配器= com.google.gson.internal.bind.TypeAdapters $ -1 @ 4121d940]   com.google.gson.internal.Excluder@4122a3c8,   com.google.gson.internal.bind.CollectionTypeAdapterFactory@40ff26d0,   com.google.gson.internal.bind.MapTypeAdapterFactory@40ff2980,   com.google.gson.internal.bind.ReflectiveTypeAdapterFactory@40ff2ba0],instanceCreators:{}}

import android.graphics.Bitmap;
import com.google.gson.annotations.SerializedName;
import java.util.Date;

公共课干预{

@SerializedName("case_id")
private String case_id;
public String getCase_id() {
    return case_id;
}

@SerializedName("user_id")
private String user_id;
public String getUser_id() {
    return user_id;
}

@SerializedName("account_id")
private String account_id;
public String getAccount_id() {
    return account_id;
}

@SerializedName("description")
private String description;
public String getDescription() {
    return description;
}

@SerializedName("solution")
private String solution;
public String getSolution() {
    return solution;
}

@SerializedName("status")
private String status;
public String getStatus() {
    return status;
}

@SerializedName("user_remarks")
private String user_remarks;
public String getUser_remarks() {
    return user_remarks;
}


@SerializedName("customer_remarks")
private String customer_remarks;
public String getCustomer_remarks() {
    return customer_remarks;
}

@SerializedName("case_complete")
private boolean case_complete;
public boolean isCase_complete() {
    return case_complete;
}

@SerializedName("charge_transport")
private boolean charge_transport;
public boolean isCharge_transport() {
    return charge_transport;
}

@SerializedName("service_billable")
private boolean service_billable;
public boolean isService_billable() {
    return service_billable;
}

@SerializedName("date_created")
private Date date_created;
public Date getDate_created() {
    return date_created;
}

@SerializedName("arrival_time")
private String arrival_time;
public String getArrival_time() {
    return arrival_time;
}

@SerializedName("departure_time")
private String departure_time;
public String getDeparture_time() {
    return departure_time;
}

@SerializedName("user_sign")
private Bitmap user_sign;
public Bitmap getUser_sign() {
    return user_sign;
}

@SerializedName("cust_sign")
private Bitmap cust_sign;
public Bitmap getCust_sign() {
    return cust_sign;
}

public void setUser_id(String user_id) {
    this.user_id = user_id;
}

public void setCase_id(String case_id) {
    this.case_id = case_id;
}


public void setAccount_id(String account_id) {
    this.account_id = account_id;
}



public void setDescription(String description) {
    this.description = description;
}



public void setSolution(String solution) {
    this.solution = solution;
}



public void setStatus(String status) {
    this.status = status;
}


public void setUser_remarks(String user_remarks) {
    this.user_remarks = user_remarks;
}



public void setCustomer_remarks(String customer_remarks) {
    this.customer_remarks = customer_remarks;
}



public void setCase_complete(boolean case_complete) {
    this.case_complete = case_complete;
}



public void setCharge_transport(boolean charge_transport) {
    this.charge_transport = charge_transport;
}

public void setService_billable(boolean service_billable) {
    this.service_billable = service_billable;
}


public void setDate_created(Date date_created) {
    this.date_created = date_created;
}

public void setArrival_time(String arrival_time) {
    this.arrival_time = arrival_time;
}


public void setDeparture_time(String departure_time) {
    this.departure_time = departure_time;
}

public void setUser_sign(Bitmap user_sign) {
    this.user_sign = user_sign;
}

public void setCust_sign(Bitmap cust_sign) {
    this.cust_sign = cust_sign;
}

}

上面的类是对象类。

我验证了对象干预并填充了字段。有人可以向我解释我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:4)

当前版本的Gson(2.2.2)对Date个对象没有问题,并且会很好地序列化/反序列化它们。如果您要查找特定格式,可以使用setDateFormat()中的GsonBuilder进行指定。

您的Bitmap对象是另一个问题。这是一个非常复杂的对象,而不是Gson将要知道如何处理的东西(更不用说甚至非常难以在JSON中表示)。您需要编写自定义序列化程序和反序列化程序来处理它。

浏览Bitmap的文档时,您可以使用int[]将像素数据提取到getPixels()数组中,并使用该数据从该数据构建Bitmap适当的静态createBitmap()方法。您需要编写一个从此生成JSON的序列化程序(还包括其他参数),然后编写一个知道如何读取该JSON并返回Bitmap的反序列化器。

有关编写自定义序列化器/反序列化器的信息,请参阅Gson用户指南:https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserialization