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