- package com.example.liuyazhou.mythirdapplication;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import com.android.volley.RequestQueue;
- import com.android.volley.Response;
- import com.android.volley.VolleyError;
- import com.android.volley.toolbox.Volley;
- import weather.Data;
- import weather.Life;
- import weather.Info;
- import weather.Realtime;
- import weather.Result;
- import weather.ALLWeather;
- public class MainActivity extends Activity {
- private Button button;
- private String urlJsonWeather = "http://op.juhe.cn/onebox/weather/query?cityname=%E5%8C%97%E4%BA%AC&dtype=json&key=******1b7942cbdcff19a08001";
- private static String TAG = MainActivity.class.getSimpleName();/key需要自己申请
- private String jsonResponse;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- button = (Button) findViewById(R.id.button);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- funWeatherGsonRequest();
- }
- });
- }
- Volley 三 http://blog.csdn.net/guolin_blog/article/details/17612763
- public void funWeatherGsonRequest() {
- RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);
- GsonRequest<ALLWeather> gsonRequest = new GsonRequest<ALLWeather>(
- urlJsonWeather, ALLWeather.class,
- new Response.Listener<ALLWeather>() {
- @Override
- public void onResponse(ALLWeather allWeather) {
- Log.i(TAG, allWeather.toString());
- Log.i(TAG, "reason is: " + allWeather.getReason());
- Result result = allWeather.getResult();
- Log.i(TAG, "result is: "+result.toString());
- Data data = result.getData();
- Log.i(TAG, "data is: "+data.toString());
- Realtime realtime =data.getRealtime();
- Log.i(TAG, "realtime is: "+realtime.toString());
- Log.i(TAG, "realtime.getCity_code(): "+ realtime.getCity_code());
- Life life = data.getLife();
- Log.i(TAG, "life is: "+life.toString());
- Log.i(TAG, " life.getDate(): "+ life.getDate());
- Info lifeInfo = life.getInfo();///这里对象名是lifeInfo是允许的
- Log.i(TAG, "lifeInfo is: "+lifeInfo.toString());
- // Log.i(TAG, "chuanyi is: "+lifeInfo.toString());
- Log.i(TAG, "chuanyi is: " + lifeInfo.getChuanyi()[0]+","+lifeInfo.getChuanyi()[1]);
- }
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- Log.e("TAG", error.getMessage(), error);
- }
- });
- mQueue.add(gsonRequest);
- }
- }
- package weather;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class ALLWeather {
- private String reason;
- private Result result;
- public String getReason() {
- return reason;
- }
- public void setReason(String reason) {
- this.reason = reason;
- }
- public Result getResult() {
- return result;
- }
- public void setResult(Result result) {
- this.result = result;
- }
- }
- package weather;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class Result {
- private Data data;
- public Data getData() {
- return data;
- }
- public void setData(Data data) {
- this.data = data;
- }
- }
- package weather;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class Data {
- private Realtime realtime;
- private Life life;
- public Realtime getRealtime() {
- return realtime;
- }
- public void setRealtime(Realtime realtime) {
- this.realtime = realtime;
- }
- public Life getLife() {
- return life;
- }
- public void setLife(Life life) {
- this.life = life;
- }
- }
- package weather;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class Realtime {
- // "city_code":"101010100",
- // "city_name":"北京",
- // "date":"2016-09-15",
- // "time":"15:00:00",
- // "week":4,
- // "moon":"八月十五",
- // "dataUptime":1473925023,
- // private String cityCode;
- private String city_code;
- // public String getCityCode() { 返回null
- // return cityCode;
- // }
- //
- // public void setCityCode(String cityCode) {
- // this.cityCode = cityCode;
- // }
- public String getCity_code() {
- return city_code;
- }
- public void setCity_code(String city_code) {
- this.city_code = city_code;
- }
- }
- package weather;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class Life {
- private String date;
- // private Info lifeInfo;错误的,类定义中的属性名、对象名、类名要与json里的key一致
- private Info info;
- public String getDate() {
- return date;
- }
- public void setDate(String date) {
- this.date = date;
- }
- public Info getInfo() {
- return info;
- }
- public void setInfo(Info info) {
- this.info = info;
- }
- }
- package weather;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class Info {
- // "info":{
- // "chuanyi":[
- // "热",
- // "天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"
- // ],
- // "ganmao":[
- // "少发",
- // "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"
- // ],
- private String[] chuanyi;
- private String[] ganmao;
- public String[] getChuanyi() {
- return chuanyi;
- }
- public void setChuanyi(String[] chuanyi) {
- this.chuanyi = chuanyi;
- }
- public String[] getGanmao() {
- return ganmao;
- }
- public void setGanmao(String[] ganmao) {
- this.ganmao = ganmao;
- }
- }
- package com.example.liuyazhou.mythirdapplication;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- Volley 三 http://blog.csdn.net/guolin_blog/article/details/17612763
- import com.android.volley.NetworkResponse;
- import com.android.volley.ParseError;
- import com.android.volley.Request;
- import com.android.volley.Response;
- import com.android.volley.toolbox.HttpHeaderParser;
- import com.google.gson.Gson;
- import java.io.UnsupportedEncodingException;
- /**
- * Created by liuyazhou on 2016/9/15.
- */
- public class GsonRequest<T> extends Request<T> {
- private final Response.Listener<T> mListener;
- private Gson mGson;
- private Class<T> mClass;
- public GsonRequest(int method, String url, Class<T> clazz, Response.Listener<T> listener,
- Response.ErrorListener errorListener) {
- super(method, url, errorListener);
- mGson = new Gson();
- mClass = clazz;
- mListener = listener;
- }
- public GsonRequest(String url, Class<T> clazz, Response.Listener<T> listener,
- Response.ErrorListener errorListener) {
- this(Method.GET, url, clazz, listener, errorListener);
- }
- @Override
- protected Response<T> parseNetworkResponse(NetworkResponse response) {
- try {
- String jsonString = new String(response.data,
- HttpHeaderParser.parseCharset(response.headers));
- return Response.success(mGson.fromJson(jsonString, mClass),
- HttpHeaderParser.parseCacheHeaders(response));
- } catch (UnsupportedEncodingException e) {
- return Response.error(new ParseError(e));
- }
- }
- @Override
- protected void deliverResponse(T response) {
- mListener.onResponse(response);
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context="com.example.liuyazhou.mythirdapplication.MainActivity">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Hello World!"
- android:id="@+id/textView" />
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="点击"
- android:id="@+id/button"
- android:layout_below="@+id/textView"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_marginTop="74dp" />
- </RelativeLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.liuyazhou.mythirdapplication">
- <uses-permission android:name="android.permission.INTERNET" />
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
- {//AllWeather //返回的JSON数据
- "reason":"successed!",
- "result":{ //Result
- "data":{ //Data
- "realtime":{ //Realtime
- "city_code":"101010100",
- "city_name":"北京",
- "date":"2016-09-15",
- "time":"15:00:00",
- "week":4,
- "moon":"八月十五",
- "dataUptime":1473925023,
- "weather":{//Weather
- "temperature":"30",
- "humidity":"47",
- "info":"多云",
- "img":"1"
- },
- "wind":{ //Wind
- "direct":"西南风",
- "power":"2级",
- "offset":null,
- "windspeed":null
- }
- },
- "life":{ //Life
- "date":"2016-9-15",
- "info":{ //Info
- "chuanyi":[
- "热",
- "天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"
- ],
- "ganmao":[
- "少发",
- "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。"
- ],
- ......................