android 客户端与服务器端之间采用JSON进行数据通信之一

                 Android 客户端与服务器端之间采用JSON进行数据通信

                                    之 客户端获取服务器端数据

最近由于公司项目需要,需要将之前手机APK端与电视机顶盒端之间以XML形式进行数据传输的媒介更换成Json格式。所以在对Json一无所知的情况下从头开始学习json这一数据交换格式。由于Json的完全独立于语言的文本格式,它易于阅读和编写,同时也易于机器的解析和生成,并且对于Java和android Json都有封装好的类进行开发使用,这都使得Json成为了理想的数据交换格式。

    客户端获取服务器端数据逻辑过程如下:

A.通过httpURLConnection连接到服务器端;

B.从服务器端获得json数据流,并转成字符串;

C.利用GSON的.fromGson()方法,将该字符串转换成对应的MODEL;

package com.gotech.org.parsexmlpvrinformodelbygson;

import java.io.ByteArrayOutputStream;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by Administrator on 15-7-16.
 */
public class HttpUtils
{
	public static String getJsonContent(String urlPath)
	{
		try
		{
			URL url = new URL(urlPath);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			conn.setDoInput(true);
			int code = conn.getResponseCode();
			if (code == 200)
			{
				return changeInputStream(conn.getInputStream());
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}

	protected static String changeInputStream(InputStream is)
	{
		String jsonString = "";
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		int len = 0;
		byte[] data = new byte[1024];
		try
		{
            while((len = is.read(data))!= -1)
            {

                outputStream.write(data,0,len);
            }
            jsonString = new String(outputStream.toString());

		}
		catch (Exception e)
		{
            e.printStackTrace();
		}
        return jsonString;
	}

}
 public class MainActivity extends Activity
{
	private static final String	urlPath	= "http://10.0.3.2:8080/ParseXmlTpModel/ParseXmlModelServlet";

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		new Thread()
		{
			public void run()
			{
				String jsonData = HttpUtils.getJsonContent(urlPath);

				List<XmlPvrInfoModel> xpims = GsonTools.getXmlPvrInforModels(jsonData,
						XmlPvrInfoModel.class);
				Log.i("XmlPvrInfoModel",   xpims.toString());
			}
		}.start();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.menu_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();

		// noinspection SimplifiableIfStatement
		if (id == R.id.action_settings)
		{
			return true;
		}

		return super.onOptionsItemSelected(item);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值