Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android VolleyÍêÈ«½âÎö(Èý)£¬¶¨ÖÆ×Ô¼ºµÄRequest
 
×÷Õß sinyu890807µÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-18
  2652  次浏览      28
 

¾­¹ýÇ°ÃæÁ½ÆªÎÄÕµÄѧϰ£¬ÎÒÃÇÒѾ­ÕÆÎÕÁË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µÄÈÏʶҲÊǸü¼ÓÉîÈëÁË¡£

   
2652 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ