java - 如何使用带有@SerializedName 注释的gson 进行序列化?

标签 java android annotations facebook-fql gson

这是我使用 Gson 进行序列化的第一种方法。 我收到 facebook 对我的 android 应用程序的响应,如下所示:

     Result: {
        Response:  responseCode: 200, 
        graphObject: GraphObject{graphObjectClass=GraphObject, 
        state={
           "data":[{"pic_square":"https:\/\/fbcdn-profile-a.akamaihd.net\/xxx.jpg",
           "uid":"1020272xxxx852765","name":"Mister X"}
        }, 
        error: null, isFromCache:false
      }]}

我创建了新类,但我不知道如何填写...

import java.io.Serializable;
import java.util.Arrays;
import com.google.gson.annotations.SerializedName;
public class FacebookResponse  implements Serializable{

private static final long serialVersionUID = -104137709256566564L;

@SerializedName("data")
private FacebookResponse[] data;


@Override
public String toString() {
return "FacebookResponse [data=" + Arrays.toString(data) + "]";
}    

在我的主要 fragment 中:

 Request request = new Request(session,
                "/fql",                         
                params,                         
                HttpMethod.GET,                 
                new Request.Callback(){         
                    public void onCompleted(Response response) {
                        Log.i(TAG, "Result: " + response.toString());
                        final GsonBuilder builder = new GsonBuilder();
                        final Gson gson = builder.create();
                        FacebookResponse facebookResponse= gson.fromJson(response.toString(),FacebookResponse.class);
                    } 
            }); 
            Request.executeBatchAsync(request);      

非常感谢您的帮助

最佳答案

解决方案

String fqlQuery = "SELECT uid, name, pic_square FROM user WHERE uid IN "
            + "(SELECT uid2 FROM friend WHERE uid1 = me() )";
    Bundle params = new Bundle();
    params.putString("q", fqlQuery);
    Session session = Session.getActiveSession();
    Request request = new Request(session, "/fql", params, HttpMethod.GET,
            new Request.Callback() {
                public void onCompleted(Response response) {
                    Log.i(TAG, "Result: " + response.toString());

                    try {
                        final GsonBuilder builder = new GsonBuilder();
                        final Gson gson = builder.create();
                        **//here i get Data values** 
                        JSONObject data = response.getGraphObject()
                                .getInnerJSONObject();
                        FacebookResponses facebookResponses = gson
                                .fromJson(data.toString(),
                                        FacebookResponses.class);

                        Intent i = new Intent(getActivity()
                                .getApplicationContext(),
                                FacebookUsersImages.class);
                        i.putExtra("facebookResponses", facebookResponses);
                        startActivity(i);

                        // Log.i(TAG, "Result finale : " +
                        // facebookResponses.toString());
                    } catch (JsonSyntaxException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
    Request.executeBatchAsync(request);

FacebookResponses 类

public class FacebookResponses implements Serializable {

private static final long serialVersionUID = 1L;

@SerializedName("data")
public FacebookRisp[] data;

public FacebookRisp[] getData() {
    return data;
}

public void setData(FacebookRisp[] data) {
    this.data = data;
}

@Override
public String toString() {
    return "FacebookResponses [data=" + Arrays.toString(data) + "]";
}
}

FacebookRisp 类

public class FacebookRisp implements Serializable {

private static final long serialVersionUID = 1L;

@SerializedName("pic_square")
private String pic_square;

@SerializedName("pic")
private String pic;

@SerializedName("pic_big")
private String pic_big;

@SerializedName("pic_small")
private String pic_small;

@SerializedName("uid")
private String uid;

public String getPic() {
    return pic;
}

public void setPic(String pic) {
    this.pic = pic;
}

public String getPic_big() {
    return pic_big;
}

public void setPic_big(String pic_big) {
    this.pic_big = pic_big;
}

public String getPic_small() {
    return pic_small;
}

public void setPic_small(String pic_small) {
    this.pic_small = pic_small;
}

@SerializedName("name")
private String name;

public String getPic_square() {
    return pic_square;
}

public void setPic_square(String pic_square) {
    this.pic_square = pic_square;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return "FacebookRisp [pic_square=" + pic_square + ", pic=" + pic + ", pic_big=" + pic_big + ", pic_small=" + pic_small + ", uid=" + uid
            + ", name=" + name + "]";
}
}

关于java - 如何使用带有@SerializedName 注释的gson 进行序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20799324/

相关文章:

annotations - java EJB中的@Singleton

java - Spring Boot 将 Java 注释上的配置属性/消息外部化

java - Spring MVC 上传后保存文件的位置

java - 在 Spring Boot 微服务中的 JWT token 中添加多个声明

java - grails 中的 log4j : how to log into file?

使用 inpout32.dll 的 Java I/O

android - 标题未在添加了自定义 View 的 Android 工具栏小部件中居中

java - 尝试在应用程序中加载 url 时出现黑屏

android - Jetpack Compose 中没有焦点的 OnKeyEvent

scala - Scala宏注解什么时候执行? (宏观天堂)