您的位置:首页 > 移动开发 > Android开发

Android利用Gson实现对象和Json数据的相互转换

2014-02-17 09:53 477 查看
MainActitity如下:

package cc.test;
import android.app.Activity;
import android.os.Bundle;
/**
* Demo描述:
* 利用Gson实现对象和Json数据的相互转换
*
* Demo描述:
* 通过一个网络请求,获取JSON数据
*
* 注意:
* 1 网络请求的参数是JSON格式的数据
* 2 请求结果返回的亦是JSON格式的数据
*
*/
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}

private void init(){
new Thread(){
public void run(){
GetJsonDataByPost httpJsonPost=new GetJsonDataByPost();
String[] pathArray=httpJsonPost.getPathArray("dev0003");
for(int i=0;i<pathArray.length;i++){
System.out.println(pathArray[i]);
}
}
}.start();

}
}


GetJsonDataByPost如下:

package cc.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;

public class GetJsonDataByPost {
static private String Service_URL = "Your url";
static private int TIMEOUT = 120 * 1000;
String mMethodName;

public String[] getPathArray(String devnum) {
try {
mMethodName = "GetPicByUser";
String[] pathArray = null;
//将调用API的参数封装成JSON格式
String jsonParams = JsonUtils.getJsonRequestParams(devnum);
//返回的JSON数据
String jsonResult = getJsonDataByPost(jsonParams);
//从返回的JSON数据获取其包含的一个数组
pathArray = JsonUtils.getJsonRequestResponse(jsonResult);
return pathArray;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public String getJsonDataByPost(String json) {
String result = null;
try {
StringEntity entity = new StringEntity(json, HTTP.UTF_8);
entity.setContentType("application/json");

DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, TIMEOUT);
client.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, TIMEOUT);

if(mMethodName == null){
return null;
}

HttpPost httpPost = new HttpPost(Service_URL + mMethodName);
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);
InputStream inputStream = response.getEntity().getContent();
StringBuffer buffer = new StringBuffer();
InputStreamReader inputReader = new InputStreamReader(inputStream);
BufferedReader bufferReader = new BufferedReader(inputReader);
String str = new String("");
while ((str = bufferReader.readLine()) != null) {
buffer.append(str);
}
bufferReader.close();
result = buffer.toString();
System.out.println("---> API的请求结果 result="+result);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}


JsonUtils如下:

package cc.test;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
public class JsonUtils {
//该对象用于封装请求API的参数.
//请求时会将该对象转换为JSON格式的数据
static class JsonRequestParams {
String devsn;
int uploadid;
float healthScore;
}
//该对象用于封装请求API返回后的结果.
//即会将JSON格式的数据结果封装成该对象
static class JsonRequestResult {
String resultcode;
int uploadid;
String[] pics;
float beat;
String crtime;
}

//将请求的参数封装成JSON的格式
public static String getJsonRequestParams(String devnum) {
try {
JsonRequestParams jsonRequestParams = new JsonRequestParams();
jsonRequestParams.devsn = devnum;
jsonRequestParams.uploadid = 0;
jsonRequestParams.healthScore = 0.0f;
Gson gson = new Gson();
//将对象转换为JSON数据
String jsonRequestParamsString = gson.toJson(jsonRequestParams);
System.out.println("---> 封装后的API请求参数 jsonRequestParamsString="+jsonRequestParamsString);
return jsonRequestParamsString;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static String[] getJsonRequestResponse(String ret){
try {
Gson gson = new Gson();
//将返回的JSON数据转换为对象JsonRequestResult
JsonRequestResult mJsonGetPicResponse = gson.fromJson(ret, JsonRequestResult.class);
if(mJsonGetPicResponse.resultcode.contains("ok")){
//从对象中获取除pics外的各个字段且输出显示
System.out.println("---> mJsonGetPicResponse.resultcode="+mJsonGetPicResponse.resultcode);
System.out.println("---> mJsonGetPicResponse.beat="+mJsonGetPicResponse.beat);
System.out.println("---> mJsonGetPicResponse.uploadid="+mJsonGetPicResponse.uploadid);
System.out.println("---> mJsonGetPicResponse.crtime="+mJsonGetPicResponse.crtime);
//从对象中获取pics字段,且返回
return mJsonGetPicResponse.pics;
}
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
return null;
}
}


main.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello Everyone"
android:layout_centerInParent="true"/>

</RelativeLayout>



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: