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

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

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浏览器输入http://localhost/JsonWeb/JsonServlet直接访问结果如下:



至此服务器端代码编码完成,下面进行客户端代码编写;

(二)客户端(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应用结果截图:



源代码下载链接:http://download.csdn.net/detail/jiangqq781931404/4087194


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