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); }
}
相关文章推荐
- Android 详解第三方介质交互之NFC,并且实现读你的交通卡,酒店房卡,学生证!
- Android 详解第三方介质交互之NFC,并且实现读你的交通卡,酒店房卡,学生证!
- 给android添加系统属性:Settings.system和SystemProperties
- Android 一步一步教你使用ViewDragHelper
- Android 把sd卡文本文件的内容显示到界面
- Android异步消息处理机制解析
- Android主线程与子线程通讯
- Android GridView 点击效果(可能是最快捷的实现,另有福利)
- 关于Genymotion使用android5.1报错或者无法启动的解决方法
- 获取当前短信内容或部分匹配内容
- Android常用URI
- 菜鸟学Android第二天
- Android Service绑定与跨进程通信
- Android工程的编译过程
- Android Socket开发 注意事项
- Android工程的编译过程
- 记录帖:Textview在android代码中可以动态的设置字号单位
- Android插件化开发之OpenAtlas初体验
- android自动化之MonkeyRunner测试环境配置(一)
- Android 4.4 新特性