¾¹ýÇ°ÃæÁ½ÆªÎÄÕµÄѧϰ£¬ÎÒÃÇÒÑ¾ÕÆÎÕÁËVolley¸÷ÖÖRequestµÄʹÓ÷½·¨£¬°üÀ¨StringRequest¡¢JsonRequest¡¢ImageRequestµÈ¡£ÆäÖÐStringRequestÓÃÓÚÇëÇóÒ»ÌõÆÕͨµÄÎı¾Êý¾Ý£¬JsonRequest(JsonObjectRequest¡¢JsonArrayRequest)ÓÃÓÚÇëÇóÒ»ÌõJSON¸ñʽµÄÊý¾Ý£¬ImageRequestÔòÊÇÓÃÓÚÇëÇóÍøÂçÉϵÄÒ»ÕÅͼƬ¡£
¿ÉÊÇVolleyÌṩ¸øÎÒÃǵÄRequestÀàÐ;ÍÖ»ÓÐÕâô¶à£¬¶øÎÒÃǶ¼ÖªµÀ£¬ÔÚÍøÂçÉÏ´«ÊäµÄÊý¾Ýͨ³£ÓÐÁ½ÖÖ¸ñʽ£¬JSONºÍXML£¬ÄÇôÈç¹ûÏëÒªÇëÇóÒ»ÌõXML¸ñʽµÄÊý¾Ý¸ÃÔõô°ìÄØ£¿ÆäʵºÜ¼òµ¥£¬VolleyÌṩÁ˷dz£Ç¿µÄÀ©Õ¹»úÖÆ£¬Ê¹µÃÎÒÃÇ¿ÉÒÔºÜÇáËɵض¨ÖƳöÈÎÒâÀàÐ͵ÄRequest£¬ÕâÒ²¾ÍÊDZ¾ÆªÎÄÕµÄÖ÷ÌâÁË¡£
ÔÚ¿ªÊ¼Ö®Ç°»¹ÊÇÓÑÇéÌáÐÑһϣ¬Èç¹ûÄ㻹ûÓÐÔĶÁ¹ýÎÒÇ°ÃæÁ½Æª¹ØÓÚVolleyµÄÎÄÕ£¬½¨ÒéÏÈÈ¥ÔĶÁÒ»ÏÂAndroid
VolleyÍêÈ«½âÎö(Ò»)£¬³õʶVolleyµÄ»ù±¾Ó÷¨ºÍAndroid VolleyÍêÈ«½âÎö(¶þ)£¬Ê¹ÓÃVolley¼ÓÔØÍøÂçͼƬ¡£
1. ×Ô¶¨ÒåXMLRequest
ÏÂÃæÎÒÃÇ×¼±¸×Ô¶¨ÒåÒ»¸öXMLRequest£¬ÓÃÓÚÇëÇóÒ»ÌõXML¸ñʽµÄÊý¾Ý¡£ÄÇô¸Ã´ÓÄÄÀ↑ʼÈëÊÖÄØ£¿¶î£¬ºÃÏñÊÇÓÐЩÎÞ´ÓÏÂÊÖ¡£Óöµ½ÕâÖÖÇé¿ö£¬ÎÒÃÇÓ¦¸ÃÈ¥²Î¿¼Ò»ÏÂVolleyµÄÔ´Â룬¿´Ò»¿´StringRequestÊÇÔõôʵÏֵģ¬È»ºó¾Í¿ÉÒÔÄ£·Â×Åд³öXMLRequestÁË¡£Ê×ÏÈ¿´ÏÂStringRequestµÄÔ´Â룬ÈçÏÂËùʾ£º
public class StringRequest extends Request<String> { private final Listener<String> mListener; /** * Creates a new request with the given method. * * @param method the request {@link Method} to use * @param url URL to fetch the string at * @param listener Listener to receive the String response * @param errorListener Error listener, or null to ignore errors */ public StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; } /** * Creates a new GET request. * * @param url URL to fetch the string at * @param listener Listener to receive the String response * @param errorListener Error listener, or null to ignore errors */ public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected void deliverResponse(String response) { mListener.onResponse(response); } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { String parsed; try { parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); } catch (UnsupportedEncodingException e) { parsed = new String(response.data); } return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); } } |
¿ÉÒÔ¿´µ½£¬StringRequestµÄÔ´ÂëºÜ¼òÁ·£¬¸ù±¾¾Íû¼¸ÐдúÂ룬ÎÒÃÇÒ»ÆðÀ´·ÖÎöÏ¡£Ê×ÏÈStringRequestÊǼ̳Ð×ÔRequestÀàµÄ£¬Request¿ÉÒÔÖ¸¶¨Ò»¸ö·ºÐÍÀ࣬ÕâÀïÖ¸¶¨µÄµ±È»¾ÍÊÇStringÁË£¬½ÓÏÂÀ´StringRequestÖÐÌṩÁËÁ½¸öÓвεĹ¹Ô캯Êý£¬²ÎÊý°üÀ¨ÇëÇóÀàÐÍ£¬ÇëÇóµØÖ·£¬ÒÔ¼°ÏìÓ¦»Øµ÷µÈ£¬ÓÉÓÚÎÒÃÇÒѾºÜÊìϤStringRequestµÄÓ÷¨ÁË£¬ÏàÐÅÕ⼸¸ö²ÎÊýµÄ×÷Óö¼²»ÓÃÔÙ½âÊÍÁ˰ɡ£µ«ÐèҪעÒâµÄÊÇ£¬ÔÚ¹¹Ô캯ÊýÖÐÒ»¶¨Òªµ÷ÓÃsuper()·½·¨½«Õ⼸¸ö²ÎÊý´«¸ø¸¸À࣬ÒòΪHTTPµÄÇëÇóºÍÏìÓ¦¶¼ÊÇÔÚ¸¸ÀàÖÐ×Ô¶¯´¦ÀíµÄ¡£
ÁíÍ⣬ÓÉÓÚRequestÀàÖеÄdeliverResponse()ºÍparseNetworkResponse()ÊÇÁ½¸ö³éÏó·½·¨£¬Òò´ËStringRequestÖÐÐèÒª¶ÔÕâÁ½¸ö·½·¨½øÐÐʵÏÖ¡£deliverResponse()·½·¨ÖеÄʵÏֺܼòµ¥£¬½ö½öÊǵ÷ÓÃÁËmListenerÖеÄonResponse()·½·¨£¬²¢½«responseÄÚÈÝ´«Èë¼´¿É£¬ÕâÑù¾Í¿ÉÒÔ½«·þÎñÆ÷ÏìÓ¦µÄÊý¾Ý½øÐлص÷ÁË¡£parseNetworkResponse()·½·¨ÖÐÔòÓ¦¸Ã¶Ô·þÎñÆ÷ÏìÓ¦µÄÊý¾Ý½øÐнâÎö£¬ÆäÖÐÊý¾ÝÊÇÒÔ×Ö½ÚµÄÐÎʽ´æ·ÅÔÚNetworkResponseµÄdata±äÁ¿Öеģ¬ÕâÀォÊý¾ÝÈ¡³öÈ»ºó×é×°³ÉÒ»¸öString£¬²¢´«ÈëResponseµÄsuccess()·½·¨Öм´¿É¡£
Á˽âÁËStringRequestµÄʵÏÖÔÀí£¬ÏÂÃæÎÒÃǾͿÉÒÔ¶¯ÊÖÀ´³¢ÊÔʵÏÖÒ»ÏÂXMLRequestÁË£¬´úÂëÈçÏÂËùʾ£º
public class XMLRequest extends Request<XmlPullParser> { private final Listener<XmlPullParser> mListener; public XMLRequest(int method, String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; } public XMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse response) { try { String xmlString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlString)); return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (XmlPullParserException e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(XmlPullParser response) { mListener.onResponse(response); } } |
¿ÉÒÔ¿´µ½£¬Æäʵ²¢Ã»ÓÐʲô̫¶àµÄÂß¼£¬»ù±¾¶¼ÊÇ·ÂÕÕStringRequestдÏÂÀ´µÄ£¬XMLRequestÒ²ÊǼ̳Ð×ÔRequestÀàµÄ£¬Ö»²»¹ýÕâÀïÖ¸¶¨µÄ·ºÐÍÀàÊÇXmlPullParser£¬ËµÃ÷ÎÒÃÇ×¼±¸Ê¹ÓÃPull½âÎöµÄ·½Ê½À´½âÎöXML¡£ÔÚparseNetworkResponse()·½·¨ÖУ¬ÏÈÊǽ«·þÎñÆ÷ÏìÓ¦µÄÊý¾Ý½âÎö³ÉÒ»¸ö×Ö·û´®£¬È»ºóÉèÖõ½XmlPullParser¶ÔÏóÖУ¬ÔÚdeliverResponse()·½·¨ÖÐÔòÊǽ«XmlPullParser¶ÔÏó½øÐлص÷¡£
ºÃÁË£¬¾ÍÊÇÕâô¼òµ¥£¬ÏÂÃæÎÒÃdz¢ÊÔʹÓÃÕâ¸öXMLRequestÀ´ÇëÇóÒ»¶ÎXML¸ñʽµÄÊý¾Ý¡£http://flash.weather.com.cn/wmaps/xml/china.xmlÕâ¸ö½Ó¿Ú»á½«ÖйúËùÓеÄÊ¡·ÝÊý¾ÝÒÔXML¸ñʽ½øÐзµ»Ø£¬ÈçÏÂËùʾ£º
<china dn="day" slick-uniqueid="3"> <city quName="ºÚÁú½" pyName="heilongjiang" cityname="¹þ¶û±õ"
state1="0" state2="0" stateDetailed="Çç" tem1="18" tem2="6" windState="Î÷±±·ç3-4¼¶×ªÎ÷·çСÓÚ3¼¶"/> <city quName="¼ªÁÖ" pyName="jilin" cityname="³¤´º"
state1="0" state2="0" stateDetailed="Çç" tem1="19" tem2="6" windState="Î÷±±·ç3-4¼¶×ªÐ¡ÓÚ3¼¶"/> <city quName="ÁÉÄþ" pyName="liaoning" cityname="ÉòÑô"
state1="0" state2="0" stateDetailed="Çç" tem1="21" tem2="7" windState="¶«±±·ç3-4¼¶"/> <city quName="º£ÄÏ" pyName="hainan" cityname="º£¿Ú"
state1="1" state2="1" stateDetailed="¶àÔÆ" tem1="30" tem2="24" windState="΢·ç"/> <city quName="ÄÚÃɹÅ" pyName="neimenggu" cityname="ºôºÍºÆÌØ"
state1="0" state2="0" stateDetailed="Çç" tem1="19" tem2="5" windState="¶«·ç3-4¼¶"/> <city quName="н®" pyName="xinjiang" cityname="ÎÚ³ľÆë"
state1="0" state2="0" stateDetailed="Çç" tem1="22" tem2="10" windState="΢·çת¶«ÄÏ·çСÓÚ3¼¶"/> <city quName="Î÷²Ø" pyName="xizang" cityname="ÀÈø"
state1="1" state2="7" stateDetailed="¶àÔÆ×ªÐ¡Óê" tem1="18" tem2="4" windState="΢·ç"/> <city quName="Çຣ" pyName="qinghai" cityname="Î÷Äþ"
state1="0" state2="1" stateDetailed="Ççת¶àÔÆ" tem1="18" tem2="2" windState="΢·ç"/> <city quName="ÄþÏÄ" pyName="ningxia" cityname="Òø´¨"
state1="0" state2="0" stateDetailed="Çç" tem1="19" tem2="8" windState="΢·ç"/> <city quName="¸ÊËà" pyName="gansu" cityname="À¼ÖÝ"
state1="0" state2="0" stateDetailed="Çç" tem1="21" tem2="6" windState="΢·ç"/> <city quName="ºÓ±±" pyName="hebei" cityname="ʯ¼Òׯ"
state1="0" state2="0" stateDetailed="Çç" tem1="25" tem2="12" windState="±±·çСÓÚ3¼¶"/> <city quName="ºÓÄÏ" pyName="henan" cityname="Ö£ÖÝ"
state1="0" state2="0" stateDetailed="Çç" tem1="24" tem2="13" windState="΢·ç"/> <city quName="ºþ±±" pyName="hubei" cityname="Î人"
state1="0" state2="0" stateDetailed="Çç" tem1="24" tem2="12" windState="΢·ç"/> <city quName="ºþÄÏ" pyName="hunan" cityname="³¤É³"
state1="2" state2="1" stateDetailed="Òõת¶àÔÆ" tem1="20" tem2="15" windState="±±·çСÓÚ3¼¶"/> <city quName="ɽ¶«" pyName="shandong" cityname="¼ÃÄÏ"
state1="1" state2="1" stateDetailed="¶àÔÆ" tem1="20" tem2="10" windState="±±·ç3-4¼¶×ªÐ¡ÓÚ3¼¶"/> <city quName="½ËÕ" pyName="jiangsu" cityname="ÄϾ©"
state1="2" state2="2" stateDetailed="Òõ" tem1="19" tem2="13" windState="Î÷±±·ç4-5¼¶×ª3-4¼¶"/> <city quName="°²»Õ" pyName="anhui" cityname="ºÏ·Ê"
state1="2" state2="1" stateDetailed="Òõת¶àÔÆ" tem1="20" tem2="12" windState="Î÷±±·çת±±·ç3-4¼¶"/> <city quName="ɽÎ÷" pyName="shanxi" cityname="Ì«Ô"
state1="0" state2="0" stateDetailed="Çç" tem1="22" tem2="8" windState="΢·ç"/> <city quName="ÉÂÎ÷" pyName="sanxi" cityname="Î÷°²"
state1="1" state2="0" stateDetailed="¶àÔÆ×ªÇç" tem1="21" tem2="9" windState="¶«±±·çСÓÚ3¼¶"/> <city quName="ËÄ´¨" pyName="sichuan" cityname="³É¶¼"
state1="1" state2="1" stateDetailed="¶àÔÆ" tem1="26" tem2="15" windState="ÄÏ·çСÓÚ3¼¶"/> <city quName="ÔÆÄÏ" pyName="yunnan" cityname="À¥Ã÷"
state1="7" state2="7" stateDetailed="СÓê" tem1="21" tem2="13" windState="΢·ç"/> <city quName="¹óÖÝ" pyName="guizhou" cityname="¹óÑô"
state1="1" state2="3" stateDetailed="¶àÔÆ×ªÕóÓê" tem1="21" tem2="11" windState="¶«·çСÓÚ3¼¶"/> <city quName="Õã½" pyName="zhejiang" cityname="º¼ÖÝ"
state1="3" state2="1" stateDetailed="ÕóÓêת¶àÔÆ" tem1="22" tem2="14" windState="΢·ç"/> <city quName="¸£½¨" pyName="fujian" cityname="¸£ÖÝ"
state1="1" state2="2" stateDetailed="¶àÔÆ×ªÒõ" tem1="28" tem2="18" windState="΢·ç"/> <city quName="½Î÷" pyName="jiangxi" cityname="Äϲý"
state1="2" state2="1" stateDetailed="Òõת¶àÔÆ" tem1="23" tem2="15" windState="±±·ç3-4¼¶×ªÎ¢·ç"/> <city quName="¹ã¶«" pyName="guangdong" cityname="¹ãÖÝ"
state1="3" state2="2" stateDetailed="ÕóÓêתÒõ" tem1="26" tem2="20" windState="΢·ç"/> <city quName="¹ãÎ÷" pyName="guangxi" cityname="ÄÏÄþ"
state1="3" state2="3" stateDetailed="ÕóÓê" tem1="23" tem2="19" windState="¶«±±·çСÓÚ3¼¶"/> <city quName="±±¾©" pyName="beijing" cityname="±±¾©"
state1="0" state2="0" stateDetailed="Çç" tem1="26" tem2="10" windState="΢·ç"/> <city quName="Ìì½ò" pyName="tianjin" cityname="Ìì½ò"
state1="1" state2="0" stateDetailed="¶àÔÆ×ªÇç" tem1="22" tem2="13" windState="¶«±±·ç3-4¼¶×ªÐ¡ÓÚ3¼¶"/> <city quName="ÉϺ£" pyName="shanghai" cityname="ÉϺ£"
state1="7" state2="1" stateDetailed="СÓêת¶àÔÆ" tem1="20" tem2="16" windState="Î÷±±·ç3-4¼¶"/> <city quName="ÖØÇì" pyName="chongqing" cityname="ÖØÇì"
state1="1" state2="3" stateDetailed="¶àÔÆ×ªÕóÓê" tem1="21" tem2="14" windState="΢·ç"/> <city quName="Ïã¸Û" pyName="xianggang" cityname="Ïã¸Û"
state1="3" state2="1" stateDetailed="ÕóÓêת¶àÔÆ" tem1="26" tem2="22" windState="΢·ç"/> <city quName="°ÄÃÅ" pyName="aomen" cityname="°ÄÃÅ"
state1="3" state2="1" stateDetailed="ÕóÓêת¶àÔÆ" tem1="27" tem2="22" windState="¶«±±·ç3-4¼¶×ªÎ¢·ç"/> <city quName="̨Íå" pyName="taiwan" cityname="̨±±"
state1="9" state2="7" stateDetailed="´óÓêתСÓê" tem1="28" tem2="21" windState="΢·ç"/> <city quName="Î÷ɳ" pyName="xisha" cityname="Î÷ɳ"
state1="3" state2="3" stateDetailed="ÕóÓê" tem1="30" tem2="26" windState="¶«±±·ç4-5¼¶"/> <city quName="ÄÏɳ" pyName="nanshadao" cityname="ÄÏɳ"
state1="1" state2="1" stateDetailed="¶àÔÆ" tem1="32" tem2="27" windState="¶«·ç4-5¼¶"/> <city quName="µöÓ㵺" pyName="diaoyudao" cityname="µöÓ㵺"
state1="7" state2="1" stateDetailed="СÓêת¶àÔÆ" tem1="23" tem2="19" windState="Î÷ÄÏ·ç3-4¼¶×ª±±·ç5-6¼¶"/> </china> |
È·¶¨ÁË·ÃÎʽӿںó£¬ÎÒÃÇÖ»ÐèÒªÔÚ´úÂëÖа´ÕÕÒÔϵķ½Ê½À´Ê¹ÓÃXMLRequest¼´¿É£º
XMLRequest xmlRequest = new XMLRequest( "http://flash.weather.com.cn/wmaps/xml/china.xml", new Response.Listener<XmlPullParser>() { @Override public void onResponse(XmlPullParser response) { try { int eventType = response.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_TAG: String nodeName = response.getName(); if ("city".equals(nodeName)) { String pName = response.getAttributeValue(0); Log.d("TAG", "pName is " + pName); } break; } eventType = response.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); mQueue.add(xmlRequest); |
¿ÉÒÔ¿´µ½£¬ÕâÀïXMLRequestµÄÓ÷¨ºÍStringRequest¼¸ºõÊÇһģһÑùµÄ£¬ÎÒÃÇÏÈ´´½¨³öÒ»¸öXMLRequestµÄʵÀý£¬²¢°Ñ·þÎñÆ÷½Ó¿ÚµØÖ·´«È룬ȻºóÔÚonResponse()·½·¨ÖнâÎöÏìÓ¦µÄXMLÊý¾Ý£¬²¢°Ñÿ¸öÊ¡µÄÃû×Ö´òÓ¡³öÀ´£¬×îºó½«Õâ¸öXMLRequestÌí¼Óµ½RequestQueueµ±ÖС£
ÏÖÔÚÔËÐÐһϴúÂ룬¹Û²ì¿ØÖÆÌ¨ÈÕÖ¾£¬¾Í¿ÉÒÔ¿´µ½Ã¿¸öÊ¡µÄÃû×Ö¶¼´ÓXMLÖнâÎö³öÀ´ÁË£¬ÈçÏÂͼËùʾ¡£

2. ×Ô¶¨ÒåGsonRequest
JsonRequestµÄÊý¾Ý½âÎöÊÇÀûÓÃAndroid±¾Éí×Ô´øµÄJSONObjectºÍJSONArrayÀ´ÊµÏֵģ¬ÅäºÏʹÓÃJSONObjectºÍJSONArray¾Í¿ÉÒÔ½âÎö³öÈÎÒâ¸ñʽµÄJSONÊý¾Ý¡£²»¹ýÒ²ÐíÄã»á¾õµÃʹÓÃJSONObject»¹ÊÇÌ«Âé·³ÁË£¬»¹Óкܶ෽·¨¿ÉÒÔÈÃJSONÊý¾Ý½âÎö±äµÃ¸ü¼Ó¼òµ¥£¬±ÈÈç˵GSON¡£Òź¶µÄÊÇ£¬VolleyÖÐĬÈϲ¢²»Ö§³ÖʹÓÃ×Ô¼ÒµÄGSONÀ´½âÎöÊý¾Ý£¬²»¹ýûÓйØÏµ£¬Í¨¹ýÉÏÃæµÄѧϰ£¬ÏàÐÅÄãÒѾ֪µÀÁË×Ô¶¨ÒåÒ»¸öRequestÊǶàôµÄ¼òµ¥£¬ÄÇôÏÂÃæÎÒÃǾÍÀ´¾ÙÒ»·´Èýһϣ¬×Ô¶¨ÒåÒ»¸öGsonRequest¡£
Ê×ÏÈÎÒÃÇÐèÒª°ÑgsonµÄjar°üÌí¼Óµ½ÏîÄ¿µ±ÖУ¬jar°üµÄÏÂÔØµØÖ·ÊÇ£ºhttps://code.google.com/p/google-gson/downloads/list
¡£
½Ó×Ŷ¨ÒåÒ»¸öGsonRequest¼Ì³Ð×ÔRequest£¬´úÂëÈçÏÂËùʾ£º
public class GsonRequest<T> extends Request<T> { private final Listener<T> mListener; private Gson mGson; private Class<T> mClass; public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); mGson = new Gson(); mClass = clazz; mListener = listener; } public GsonRequest(String url, Class<T> clazz, Listener<T> listener, 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); } } |
¿ÉÒÔ¿´µ½£¬GsonRequestÊǼ̳Ð×ÔRequestÀàµÄ£¬²¢ÇÒͬÑùÌṩÁËÁ½¸ö¹¹Ô캯Êý¡£ÔÚparseNetworkResponse()·½·¨ÖУ¬ÏÈÊǽ«·þÎñÆ÷ÏìÓ¦µÄÊý¾Ý½âÎö³öÀ´£¬È»ºóͨ¹ýµ÷ÓÃGsonµÄfromJson·½·¨½«Êý¾Ý×é×°³É¶ÔÏó¡£ÔÚdeliverResponse·½·¨ÖÐÈÔÈ»Êǽ«×îÖÕµÄÊý¾Ý½øÐлص÷¡£
ÄÇôÏÂÃæÎÒÃǾÍÀ´²âÊÔÒ»ÏÂÕâ¸öGsonRequestÄܲ»Äܹ»Õý³£¹¤×÷°É£¬µ÷ÓÃhttp://www.weather.com.cn/data/sk/101010100.htmlÕâ¸ö½Ó¿Ú¿ÉÒԵõ½Ò»¶ÎJSON¸ñʽµÄÌìÆøÊý¾Ý£¬ÈçÏÂËùʾ£º
{"weatherinfo":{"city":"±±¾©","cityid":"101010100","temp":"19",
"WD":"ÄÏ·ç","WS":"2¼¶","SD":"43%","WSE":"2","time":"19:45","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB"}} |
½ÓÏÂÀ´ÎÒÃÇʹÓöÔÏóµÄ·½Ê½½«Õâ¶ÎJSON×Ö·û´®±íʾ³öÀ´¡£Ð½¨Ò»¸öWeatherÀ࣬´úÂëÈçÏÂËùʾ£º
public class Weather { private WeatherInfo weatherinfo; public WeatherInfo getWeatherinfo() { return weatherinfo; } public void setWeatherinfo(WeatherInfo weatherinfo) { this.weatherinfo = weatherinfo; } } |
WeatherÀàÖÐÖ»ÊÇÒýÓÃÁËWeatherInfoÕâ¸öÀà¡£½Ó×Åн¨WeatherInfoÀ࣬´úÂëÈçÏÂËùʾ£º
public class WeatherInfo { private String city; private String temp; private String time; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getTemp() { return temp; } public void setTemp(String temp) { this.temp = temp; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } } |
WeatherInfoÀàÖк¬ÓÐcity¡¢temp¡¢timeÕ⼸¸ö×ֶΡ£ÏÂÃæ¾ÍÊÇÈçºÎµ÷ÓÃGsonRequestÁË£¬ÆäʵҲºÜ¼òµ¥£¬´úÂëÈçÏÂËùʾ£º
GsonRequest<Weather> gsonRequest = new GsonRequest<Weather>( "http://www.weather.com.cn/data/sk/101010100.html", Weather.class, new Response.Listener<Weather>() { @Override public void onResponse(Weather weather) { WeatherInfo weatherInfo = weather.getWeatherinfo(); Log.d("TAG", "city is " + weatherInfo.getCity()); Log.d("TAG", "temp is " + weatherInfo.getTemp()); Log.d("TAG", "time is " + weatherInfo.getTime()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); mQueue.add(gsonRequest); |
¿ÉÒÔ¿´µ½£¬ÕâÀïonResponse()·½·¨µÄ»Øµ÷ÖÐÖ±½Ó·µ»ØÁËÒ»¸öWeather¶ÔÏó£¬ÎÒÃÇͨ¹ýËü¾Í¿ÉÒԵõ½WeatherInfo¶ÔÏ󣬽ÓמÍÄÜ´ÓÖÐÈ¡³öJSONÖеÄÏà¹ØÊý¾ÝÁË¡£ÏÖÔÚÔËÐÐһϴúÂ룬¹Û²ì¿ØÖÆÌ¨ÈÕÖ¾£¬´òÓ¡Êý¾ÝÈçÏÂͼËùʾ£º

ÕâÑùµÄ»°£¬XMLRequestºÍGsonRequestµÄ¹¦Äܾͻù±¾¶¼ÊµÏÖÁË£¬ÎÒÃÇÒ²ÊǽèÖúÕâÁ½¸öÀý×ÓÉî¿ÌµØÀí½âÁË×Ô¶¨ÒåRequestµÄ·½·¨£¬¶ÔVolleyµÄÈÏʶҲÊǸü¼ÓÉîÈëÁË¡£
|