/**
* json原生解析的案例
*
* 详细见截图的资料"json解析之原生解析"
*
* 遇到{} 就是对象 遇到[] 就是集合
* @author Administrator
*
*/
public class Demo implements Callback{
public static void main(String[] args){
Demo demo = new Demo();
Utls u = new Utls("http://www.tngou.net/api/top/classify",demo);
u.getJson();//联网获取json数据
}
//解析jison数据
@Override
public void showJson(String content) {
List<Tngou> tngous = new ArrayList<>();
//创建容器,由我们手动创建javaBean知道,要储存Tngou
//rootObject就是json串对象的根对象
JSONObject rootObject = new JSONObject(content);
//使用JSONObject接受json数据进行构造根object,一层层解析,遇到数组就使用getJSONArray方法,遇到对象就创建JSOOBject对象,进行储存在javaBean对象上
Root root = new Root();
root.setStatus(rootObject.getBoolean("status"));
JSONArray tngou = rootObject.getJSONArray("tngou");
for(int i = 0;i <tngou.length(); i++){
JSONObject object = tngou.getJSONObject(i); //获取集合
Tngou t = new Tngou();
t.setTitle(object.getString("title"));
tngous.add(t);
}
root.setTngou(tngous);
System.out.println(root.getStatus());
//遍历集合中的Tngou对象
for(Tngou tngou1: root.getTngou()) {
System.out.println(tngou1.getTitle());
}
}
}
使用volley获取网络数据,并使用原生解析json字符串
本案例使用第三方框架进行联网,获取到数据后使用android原生解析获取的json数据,展示到屏幕上
原理:将手机号码传到网上,通过第三方api获取手机归属地。将获取的结果展示到手机上
studio集成volley
右击项目 –》open model setting–》 选择Dependencies –》选择“+” 联网添加volley库
使用volley
在Volley内,一般的Http的请求方法有三种,分别是StringRequest,JsonObjectRequest以及JsonArrayRequest,而每个方法都可以分为GET和POST请求方式。从它们的名字可以知道,StringRequest是请求一段字符串,JsonObjectRequest是请求一个JSON对象。JsonArrayRequest是请求一组JSON数组。
1、建立请求队列
RequestQueue queue = Volley.newRequestQueue(this);
2. 创建请求对象(在这里边有请求成功的回调,获取数据后解析即可)
/**
* 参数一:请求方法 get/post
* 参数二:url
* 参数三:请求成功的回调
* 参数四:请求失败的回调
*/
StringRequest request = new StringRequest(Method.PUBLIC,
url,
//请求成功后的回调
new Response.Listener<String>() {
@Override
public void onResponse(String json) {
Log.i("json", json);
/*打印的结果:
* {"resultcode":"200",
"reason":"Return Successd!",
"result":{"province":"河南","city":"三门峡","areacode":"0398","zip":"472000","company":"中国移动","card":"移动预付费卡"},
"error_code":0}*/
//解析json数据
volleyJson(json);
}
},
//请求失败后的回调
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("error",error.toString());
}
});
//将请求添加到请求队列中
queue.add(request);
}
- 原生解析json数据
原生解析的原则就是:遇到{}就用getJSONObject 遇到[] 就用getJSONArray
//服务器返回的json串如下
{"resultcode":"200",
"reason":"Return Successd!",
"result":{"province":"河南","city":"三门峡","areacode":"0398","zip":"472000","company":"中国移动","card":"移动预付费卡"},
"error_code":0}
private void volleyJson(String json) {
//获取jsonObject对象
try {
JSONObject jsonObject = new JSONObject(json);
//原生解析原则 遇到{}就用getJSONObject 遇到[] 就用getJSONArray
JSONObject object = jsonObject.getJSONObject("result");
//省份
String province = object.getString("province");
//城市
String city = object.getString("city");
//区号
String areacode = object.getString("areacode");
// 运营商
String company = object.getString("company");
//卡的类型
String card = object.getString("card");
content.setText("归属地:" + province + city + "\n"
+ "区号:" + areacode + "\n"
+ "运营商:" + company + "\n"
+ "用户类型:" + card
);
} catch (JSONException e) {
e.printStackTrace();
}