zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android解析JSON对象及实例说明

2023-06-13 09:14:50 时间

JSON是一种轻量级的对象,数据体积小,方便传输,易于解析!

首先新建一个类工具类JsonUtil,用于获取请求返回的数据

复制代码代码如下:

publicclassJsonUtil{
 privatestaticfinalStringTAG="JSONUTIL";
 publicstaticJSONObjectgetJSON(Stringurl)throwsException{
  returnnewJSONObject(getRequest(url));
 }
 protectedstaticStringgetRequest(Stringurl){
  returngetRequest(url,newDefaultHttpClient(newBasicHttpParams()));
 }
 protectedstaticStringgetRequest(Stringurl,DefaultHttpClientclient){
  Stringresult=null;
  intstatusCode=0;
  HttpGethttpGet=newHttpGet(url);
  try{
   HttpResponsehttpResponse=client.execute(httpGet);
   statusCode=httpResponse.getStatusLine().getStatusCode();//statusCode为200时表示请求数据成功
   result=parseInputStream(httpResponse.getEntity());
  }catch(ClientProtocolExceptione){
   e.printStackTrace();
  }catch(IOExceptione){
   e.printStackTrace();
  }finally{
   httpGet.abort();
  }
  returnresult;
 }
 privatestaticStringparseInputStream(HttpEntityentity){
  StringBuildersb=null;
  try{
   sb=newStringBuilder("");
   InputStreaminputStream=entity.getContent();
   intlength=0;
   byte[]buffer=newbyte[1024];
   while((length=inputStream.read(buffer))>-1){
    sb.append(newString(buffer,0,length));
   }
   returnsb.toString();
  }catch(IllegalStateExceptione){
   e.printStackTrace();
  }catch(IOExceptione){
   e.printStackTrace();
  }
  returnsb.toString();
 }
}

获取数据并解析数据:
注:模拟器访问自己电脑上的网站不能用localhost:8080或者127.0.0.1:8080,因为模拟器默认将模拟器本身设定为localhost,所以如果设置为这样的方式就将访问模拟器本身。我们需要将主机名修改为10.0.2.2,此主机名是模拟器设定的特定的访问自己电脑的主机名,它记录了你的电脑的名称。
另外:获取数据需要将下面的方法封装到一个新线程中,不能放在程序主线程当中!
复制代码代码如下:

 /*http://10.0.2.2:8080/index.jsp
 *{students:[{name:"Livingstone",age:25},{name:"LS",age:26}],class:"09GIS"}
 */
 privatevoidLivingstone(){
  try{
   StringURL="http://10.0.2.2:8080/index.jsp";
   //获取后台返回的JSON对象-->{students:[{name:"Livingstone",age:25},{name:"LS",age:26}],class:"09GIS班"}
   JSONObjectjObj=JsonUtil.getJSON(URL);
   //获取学生数组-->students:[{name:"Livingstone",age:25},{name:"LS",age:26}]
   JSONArrayjArr=jObj.getJSONArray("students");
   //获取班级-->class:"09GIS班"
   Stringclassname=jObj.getString("class");
   //根据索引获取第一个学生的JSON对象-->{name:"Livingstone",age:25}
   JSONObjectj1=jArr.getJSONObject(0);

   StringstudentInfo=jArr.length()+"个学生"+j1.getString("name")
     +j1.getInt("age");
  }catch(Exceptione){
   e.printStackTrace();
  }
 }