最近跟着一个Volley教程写了一个自定义Volley下的XMLRequest类
(教程地址:点击打开链接),用于解析xml数据,结果出了很奇怪错误。
先看源代码:
首先是XMLRequest类,继承Volley的Request:
public class XMLRequest extends Request
{
private final Response.Listener
mListener;
public XMLRequest(String url, Response.Listener
Listener,Response.ErrorListener errorListener) {
this(Method.GET,url,Listener, errorListener);
}
public XMLRequest(int method, String url,Response.Listener
listener, Response.ErrorListener errorListener) {
super(method, url, errorListener);
this.mListener=listener;
}
@Override
protected Response
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); } }
接着是XmlActivity类,用于对获取到的xml数据进行解析:
public class XmlActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xml);
RequestQueue requestQueue= Volley.newRequestQueue(this);
XMLRequest xmlRequest = new XMLRequest("http://flash.weather.com.cn/wmaps/xml/china.xml",
new Response.Listener
() {
@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(1);
Log.i("TAG", "------------------------------------------pName = " + 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);
}
});
requestQueue.add(xmlRequest);
}
}
刚开始Log日志是可以打印出的,也就是获取到了数据了,但是中文乱码,所以我将XMLRequest里面的parseNetworkResponse方法里面的
String xmlString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
第二个参数改为"UTF-8",结果出错,于是又改回来,然而该回来后就一直报这个错误
09-15 15:20:17.149 2538-2538/com.example.a12345.volley_test E/TAG: ++++++++++++++++++++++++++++++++++++++null
com.android.volley.NetworkError
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:166)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
哪位大神知道代码哪里错了吗?找了好久,还是找不到,帮忙看看,万分感谢!