android的从服务器取得json对象进行解析
jopen
11年前
先写服务器端的代码,先写一个person对象
public class Person { private int id; private String name; private String address; public Person() { // TODO Auto-generated constructor stub } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", address=" + address + "]"; } public Person(int id, String name, String address) { super(); this.id = id; this.name = name; this.address = address; } }
初始化一下person对象
public class JsonService { //一个person对象 public Person getPerson(){ Person person=new Person(1001,"hang","suqian"); return person; } }
服务器端json的工具类
public class JsonToos { public static String CreateJsonString(String key,Object value){ //生成json的string JSONObject jsonObject=new JSONObject(); jsonObject.put(key,value); return jsonObject.toString(); } }服务端的servlet
public class JsonAction extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private JsonService service; /** * @see HttpServlet#HttpServlet() */ public JsonAction() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); String jsonString=JsonToos.CreateJsonString("person",service.getPerson()); out.println(jsonString); out.flush(); out.close(); } @Override public void init() throws ServletException { service=new JsonService(); } }
下面为android端的代码
注意
<uses-permission android:name="android.permission.INTERNET"/>
这个一定要加的,网络访问权限
定义person的对象同上
下面是http的工具类,主要是http访问,获取json的字符串
public class HttpUtils { public static String getJsonContent(String path){ try { URL url=new URL(path); HttpURLConnection connection=(HttpURLConnection) url.openConnection(); connection.setConnectTimeout(3000); connection.setRequestMethod("GET"); connection.setDoInput(true); int code=connection.getResponseCode(); if(code==200){ return changeInputString(connection.getInputStream()); } } catch (Exception e) { // TODO: handle exception } return ""; } private static String changeInputString(InputStream inputStream) { String jsonString=""; ByteArrayOutputStream outPutStream=new ByteArrayOutputStream(); byte[] data=new byte[1024]; int len=0; try { while((len=inputStream.read(data))!=-1){ outPutStream.write(data, 0, len); } jsonString=new String(outPutStream.toByteArray()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return jsonString; } }
下面为解析json字符串,把值赋给person对象
public class JsonTools { public static Person getPerson(String key, String jsonString) { Person person = new Person(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONObject personObject = jsonObject.getJSONObject(key); person.setId(personObject.getInt("id")); person.setName(personObject.getString("name")); person.setAddress(personObject.getString("address")); } catch (Exception e) { // TODO: handle exception } return person; } public static List<Person> getPersons(String key, String jsonString) { List<Person> list = new ArrayList<Person>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject2 = jsonArray.getJSONObject(i); Person person = new Person(); person.setId(jsonObject2.getInt("id")); person.setName(jsonObject2.getString("name")); person.setAddress(jsonObject2.getString("address")); list.add(person); } } catch (Exception e) { // TODO: handle exception } return list; } public static List<String> getlistString(String key, String jsonString) { List<String> list = new ArrayList<String>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { String msg = jsonArray.getString(i); list.add(msg); } } catch (Exception e) { // TODO: handle exception } return list; } public static List<Map<String,Object>> getlistMap(String key, String jsonString){ List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject2 = jsonArray.getJSONObject(i); Map<String,Object> map=new HashMap<String, Object>(); Iterator<String> iterator=jsonObject2.keys(); while(iterator.hasNext()){ String json_key=iterator.next(); Object json_value=jsonObject2.get(json_key); if(json_value==null){ json_value=""; } map.put(json_key, json_value); } list.add(map); } }catch(Exception e){ e.printStackTrace(); } return list; } }
android点击button触发的事件
@Override public void onClick(View v) { switch (v.getId()) { case R.id.person: path="http://192.168.123.1/http/JsonAction"; String jsonstring=HttpUtils.getJsonContent(path); Log.i(TAG,"1212"+jsonstring); Person person=JsonTools.getPerson("person", jsonstring); Log.i(TAG,person.toString()); break; default: break; } } }
完成了json的解析!!!