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

简介: MainActitity如下:package cc.test;import android.app.Activity;import android.
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>




相关文章
|
14天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
3天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
18天前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
28天前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
20天前
|
JSON API 数据格式
商品详情数据JSON格式示例参考(api接口)
JSON数据格式的商品详情数据通常包含商品的多个层级信息,以下是一个综合多个来源信息的JSON数据格式的商品详情数据示例参考:
|
21天前
|
存储 JSON 前端开发
JSON与现代Web开发:数据交互的最佳选择
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。它以文本格式存储数据,常用于Web应用中的数据传输,尤其是在客户端和服务器之间。
31 0
|
23天前
|
存储 JavaScript 前端开发
TypeScript :使用mock提供数据&as const 的使用&tsconfig.json配置
本文介绍了如何在项目中使用 Mock 提供数据,包括安装依赖、配置 Vite 和 TypeScript,以及如何使用 `as const`、元组和 tsconfig.json 配置文件。通过这些配置,可以实现更灵活和高效的开发体验。
|
数据采集 Android开发 索引
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
555 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
|
数据采集 存储 传感器
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
271 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
|
数据采集 传感器 编解码
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
249 0
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)