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

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

2015-08-12 16:52 302 查看

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);
}


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