当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 解析JSON对象及实例说明

Android 解析JSON对象及实例说明

2019年07月24日  | 移动技术网移动技术  | 我要评论

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

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

复制代码 代码如下:

public class jsonutil {
 private static final string tag = "jsonutil";
 public static jsonobject getjson(string url) throws exception {
  return new jsonobject(getrequest(url));
 }
 protected static string getrequest(string url) {
  return getrequest(url, new defaulthttpclient(new basichttpparams()));
 }
 protected static string getrequest(string url, defaulthttpclient client) {
  string result = null;
  int statuscode = 0;
  httpget httpget = new httpget(url);
  try {
   httpresponse httpresponse = client.execute(httpget);
   statuscode = httpresponse.getstatusline().getstatuscode();// statuscode为200时表示请求数据成功
   result = parseinputstream(httpresponse.getentity());
  } catch (clientprotocolexception e) {
   e.printstacktrace();
  } catch (ioexception e) {
   e.printstacktrace();
  } finally {
   httpget.abort();
  }
  return result;
 }
 private static string parseinputstream(httpentity entity) {
  stringbuilder sb = null;
  try {
   sb = new stringbuilder("");
   inputstream inputstream = entity.getcontent();
   int length = 0;
   byte[] buffer = new byte[1024];
   while ((length = inputstream.read(buffer)) > -1) {
    sb.append(new string(buffer, 0, length));
   }
   return sb.tostring();
  } catch (illegalstateexception e) {
   e.printstacktrace();
  } catch (ioexception e) {
   e.printstacktrace();
  }
  return sb.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' }
  */
 private void livingstone() {
  try {
   string url = "http://10.0.2.2:8080/index.jsp";
   // 获取后台返回的json对象 --> { students:[{name:'livingstone',age:25},{name:'ls',age:26}],class:'09gis班' }
   jsonobject jobj = jsonutil.getjson(url);
   // 获取学生数组 --> students:[{name:'livingstone',age:25},{name:'ls',age:26}]
   jsonarray jarr = jobj.getjsonarray("students");
   // 获取班级 --> class:'09gis班'
   string classname = jobj.getstring("class");
   // 根据索引获取第一个学生的json对象 --> {name:'livingstone',age:25}
   jsonobject j1 = jarr.getjsonobject(0);

   string studentinfo = jarr.length() + "个学生" + j1.getstring("name")
     + j1.getint("age");
  } catch (exception e) {
   e.printstacktrace();
  }
 }


如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网