用AsyncHttpClient访问Json数据
2015-11-29 16:20
681 查看
访问的页面是:
北京天气
例如这里的数据:
第一个大括号代表着最外围的类,它有一个成员变量,就是weatherinfo:后面的大括号,所以这里我们需要两个类,分别代表最外面的大括号和里面的大括号
那么GSON解析就是这样的:
北京天气
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"15℃","temp2":"5℃","weather":"多云","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}
使用JSONObject
用[]包裹的是JSONArray,这里的数据都是用{}包裹,所以都是JSONObject,里面还包括了一个key为weather的JSONObjectpackage com.jackie.jsontest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import net.callumtaylor.asynchttp.AsyncHttpClient; import net.callumtaylor.asynchttp.response.StringResponseHandler; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class MainActivity extends AppCompatActivity { private Button btnJO; private Button btnGS; private AsyncHttpClient asyncHttpClient = new AsyncHttpClient("http://www.weather.com.cn/adat/cityinfo/101010100.html"); private String response; private String city; private String cityid; private String temp1; private String temp2; private String weather; private String img1; private String img2; private String ptime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); asyncHttpClient.get(new StringResponseHandler() { @Override public void onSuccess() { response = getContent(); Log.d("jackie", response); //返回的是: // {"weatherinfo": // {"city":"北京", // "cityid":"101010100", // "temp1":"15℃", // "temp2":"5℃", // "weather":"多云", // "img1":"d1.gif", // "img2":"n1.gif", // "ptime":"08:00"} // } } }); btnJO = (Button) findViewById(R.id.btnJO); btnJO.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { parseJSONWithJSONObject(response); } }); } private void parseJSONWithJSONObject(String response) { try { /* 分析一下返回的json数据,均使用的是大括号包裹,说明是JSONObject */ //得到第一层JSONObject JSONObject jsonObject = new JSONObject(response); //得到第二层JSONObject JSONObject weatherInfo = jsonObject.getJSONObject("weatherinfo"); city = weatherInfo.getString("city"); cityid = weatherInfo.getString("cityid"); temp1 = weatherInfo.getString("temp1"); temp2 = weatherInfo.getString("temp2"); weather = weatherInfo.getString("weather"); img1 = weatherInfo.getString("img1"); img2 = weatherInfo.getString("img2"); ptime = weatherInfo.getString("ptime"); Log.d("jackie", "city: " + city); Log.d("jackie", "cityid: " + cityid); Log.d("jackie", "temp1: " + temp1); Log.d("jackie", "temp2: " + temp2); Log.d("jackie", "weather: " + weather); Log.d("jackie", "img1: " + img1); Log.d("jackie", "img2: " + img2); Log.d("jackie", "ptime: " + ptime); } catch (JSONException e) { e.printStackTrace(); } } }
使用GSON解析
GSON解析实际上是将json数据映射成java实体类例如这里的数据:
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"15℃","temp2":"5℃","weather":"多云","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}
第一个大括号代表着最外围的类,它有一个成员变量,就是weatherinfo:后面的大括号,所以这里我们需要两个类,分别代表最外面的大括号和里面的大括号
/** * 代表最外围的大括号的类 * Created by Law on 2015/11/29. */ public class GSONObject { /* 这里注意,变量的名字weatherinfo一定要和json数据中的一模一样,大小写要区分! */ private WeatherInfo weatherinfo; public WeatherInfo getWeatherinfo() { return weatherinfo; } public void setWeatherinfo(WeatherInfo weatherinfo) { this.weatherinfo = weatherinfo; } }
/** * 代表weatherinfo:{} * Created by Law on 2015/11/29. */ public class WeatherInfo { private String city; private String cityid; private String temp1; private String temp2; private String weather; private String img1; private String img2; private String ptime; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCityid() { return cityid; } public void setCityid(String cityid) { this.cityid = cityid; } public String getTemp1() { return temp1; } public void setTemp1(String temp1) { this.temp1 = temp1; } public String getTemp2() { return temp2; } public void setTemp2(String temp2) { this.temp2 = temp2; } public String getWeather() { return weather; } public void setWeather(String weather) { this.weather = weather; } public String getImg1() { return img1; } public void setImg1(String img1) { this.img1 = img1; } public String getImg2() { return img2; } public void setImg2(String img2) { this.img2 = img2; } public String getPtime() { return ptime; } public void setPtime(String ptime) { this.ptime = ptime; } @Override public String toString() { return "WeatherInfo{" + "city='" + city + '\'' + ", cityid='" + cityid + '\'' + ", temp1='" + temp1 + '\'' + ", temp2='" + temp2 + '\'' + ", weather='" + weather + '\'' + ", img1='" + img1 + '\'' + ", img2='" + img2 + '\'' + ", ptime='" + ptime + '\'' + '}'; } }
那么GSON解析就是这样的:
private void parseJSONWithGSON(String response) { Gson gson = new Gson(); GSONObject gsonObject = gson.fromJson(response, GSONObject.class); WeatherInfo weatherInfo = gsonObject.getWeatherinfo(); Log.d("jackie", "city: " + weatherInfo.getCity()); Log.d("jackie", "cityid: " + weatherInfo.getCityid()); Log.d("jackie", "temp1: " + weatherInfo.getTemp1()); Log.d("jackie", "temp2: " + weatherInfo.getTemp2()); Log.d("jackie", "weather: " + weatherInfo.getWeather()); Log.d("jackie", "img1: " + weatherInfo.getImg1()); Log.d("jackie", "img2: " + weatherInfo.getImg2()); Log.d("jackie", "ptime: " + weatherInfo.getPtime()); }
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 我是运营,我没有假期
- XML 与 JSON 优劣对比
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式