Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
2012-02-24 15:08
746 查看
前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析;
首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高;
因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet):
构造的Json数据如下:
[{"name":"张三","address":"北京","age":20},{"name":"李四","address":"上海","age":30},{"name":"王五","address":"深圳","age":35}]
[一]服务器端(Person.java省略):
①:数据构造JsonService.java
http://localhost/JsonWeb/JsonServlet直接访问结果如下:
至此服务器端代码编码完成,下面进行客户端代码编写;
(二)客户端(Person类,和展示数据的布局文件因为简单省去)
①:获取服务器端的Json数据并且解析的工具类JsonParse.java
必要的需要导入的包省去
至此服务器端和客户端编码介绍,运行android应用结果截图:
源代码下载链接:http://download.csdn.net/detail/jiangqq781931404/4087194
首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高;
因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet):
构造的Json数据如下:
[{"name":"张三","address":"北京","age":20},{"name":"李四","address":"上海","age":30},{"name":"王五","address":"深圳","age":35}]
[一]服务器端(Person.java省略):
①:数据构造JsonService.java
publicclassJsonService{ publicstaticList<Person>getListPerson(){ List<Person>mLists=newArrayList<Person>(); mLists.add(newPerson("张三","北京",20)); mLists.add(newPerson("李四","上海",30)); mLists.add(newPerson("王五","深圳",35)); returnmLists; }②:Servlet的代码(包括构造Json数据,没有使用Json数据转换方法)JsonServlet.java
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriterout=response.getWriter(); List<Person>persons=JsonService.getListPerson(); StringBuffersb=newStringBuffer(); sb.append('['); for(Personperson:persons){ sb.append('{').append("\"name\":").append("\""+person.getName()+"\"").append( ","); sb.append("\"address\":").append("\""+person.getAddress()+"\"").append(","); sb.append("\"age\":").append(person.getAge()); sb.append('}').append(","); } sb.deleteCharAt(sb.length()-1); sb.append(']'); out.write(newString(sb)); out.flush(); out.close(); }③:部署到Tomact浏览器输入
至此服务器端代码编码完成,下面进行客户端代码编写;
(二)客户端(Person类,和展示数据的布局文件因为简单省去)
①:获取服务器端的Json数据并且解析的工具类JsonParse.java
必要的需要导入的包省去
publicclassJsonParse{ /** *解析Json数据 * *@paramurlPath *@returnmlists *@throwsException */ publicstaticList<Person>getListPerson(StringurlPath)throwsException{ List<Person>mlists=newArrayList<Person>(); byte[]data=readParse(urlPath); JSONArrayarray=newJSONArray(newString(data)); for(inti=0;i<array.length();i++){ JSONObjectitem=array.getJSONObject(i); Stringname=item.getString("name"); Stringaddress=item.getString("address"); intage=item.getInt("age"); mlists.add(newPerson(name,address,age)); } returnmlists; } /** *从指定的url中获取字节数组 * *@paramurlPath *@return字节数组 *@throwsException */ publicstaticbyte[]readParse(StringurlPath)throwsException{ ByteArrayOutputStreamoutStream=newByteArrayOutputStream(); byte[]data=newbyte[1024]; intlen=0; URLurl=newURL(urlPath); HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); InputStreaminStream=conn.getInputStream(); while((len=inStream.read(data))!=-1){ outStream.write(data,0,len); } inStream.close(); returnoutStream.toByteArray(); }}②:主Activity类
publicclassMainActivityextendsActivity{ privateButtonmButton; privateListViewmListView; //使用IP不能使用localhost或者127.0.0.1,因为android模拟器默认绑定这个IP,这里应该访问局域网IP privatestaticfinalStringurlPath="http://10.16.31.207/JsonWeb/JsonServlet"; privatestaticfinalStringTAG="MainActivity"; privateList<Person>persons; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton=(Button)findViewById(R.id.button1); mListView=(ListView)findViewById(R.id.listView1); mButton.setOnClickListener(newMyOnClickListener()); } privateclassMyOnClickListenerimplementsOnClickListener{ @Override publicvoidonClick(Viewv){ try{ //得到Json解析成功之后数据 persons=JsonParse.getListPerson(urlPath); List<HashMap<String,Object>>data=newArrayList<HashMap<String,Object>>(); for(inti=0;i<persons.size();i++){ HashMap<String,Object>map=newHashMap<String,Object>(); map.put("name",persons.get(i).getName()); map.put("address",persons.get(i).getAddress()); map.put("age",persons.get(i).getAge()); data.add(map); } //初始化适配器,并且绑定数据 SimpleAdapter_Adapter=newSimpleAdapter(MainActivity.this, data,R.layout.listview_item,newString[]{"name", "address","age"},newint[]{R.id.textView1, R.id.textView2,R.id.textView3}); mListView.setAdapter(_Adapter); }catch(Exceptione){ Toast.makeText(MainActivity.this,"解析失败",2000).show(); Log.i(TAG,e.toString()); } } }
至此服务器端和客户端编码介绍,运行android应用结果截图:
源代码下载链接:
相关文章推荐
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- 转:Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- android客户端从服务器端获取json数据并解析的实现代码get+post
- android客户端从服务器端获取json数据并解析的实现代码
- android客户端从服务器端获取json数据并解析的实现代码
- android客户端从服务器端获取json数据并解析的实现代码
- Android从服务端获取json解析显示在客户端上面
- (转)android客户端从服务器端获取json数据并解析的实现代码
- android客户端从服务器端获取json数据并解析
- Android客户端从服务器端获取json数据并解析的实现代码