Android利用Gson实现对象和Json数据的相互转换
jopen
11年前
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>