学习内容:
1.使用Volley实现异步加载Json数据...
Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后对对象进行解析,从而获取Json数据,另一种方式则是通过获取JsonArray的方式来对Json数据进行解析,其实就是Json数组...由于Json数据格式的不同,因此也就有了这两种方式...
因此实现类也就成为了两个JsonObjectRequest.java和JsonArrayRequest.java,他们都 extends JsonRequest,而JsonRequest继承了Request类,重写了其中内部的一些方法...因为获取Json对象,提交这个请求已经是一个确定好的类型,因此需要对父类中的一些方式进行重写...Request只是为更多的请求方式提供了一个父类,其他类型的请求,需要使用新的类进行继承,重写,然后子类再充当父类,用新的子类进行继承和重写...从而实现了良好的扩展....
那么JsonRequest为什么没有实现parseNetWorkResponse想必也就不用说了,对外提供接口,方便扩展和实现...
我们先看看第一种,使用Volley获取JsonObject,从而解析获取Json数据...
1.JsonObjectRequest.java
这里的源码就非常的简单了,没什么太多可说的...关键还是看如何调用...
package com.android.volley.toolbox; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import org.json.JSONException; import org.json.JSONObject; import java.io.UnsupportedEncodingException; public class JsonObjectRequest extends JsonRequest<JSONObject> { JsonObjectRequest(int method, String url, JSONObject jsonRequest, Listener<JSONObject> listener, ErrorListener errorListener) { super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener); } JsonObjectRequest(String url, JSONObject jsonRequest, Listener<JSONObject> listener, ErrorListener errorListener) { this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest, listener, errorListener); } @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = Response.success(new JSONObject(jsonString),//返回成功数据... HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } } 调用的方式我们还是通过例子来完成...这里我们通过请求来获取Json数据...
:8080/JSP/Json_1.txt是这个样子的...简单的Json数据...
{ "user":[ {"userid":"1","username":"darker","userpassword":"49681888"}, {"userid":"2","username":"darker_1","userpassword":"49681888"}, {"userid":"3","username":"darker_2","userpassword":"49681888"} ] }下面通过请求完成调用,获取其中的内容...
package com.example.oop; import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } public void init(){ RequestQueue queue=Volley.newRequestQueue(MainActivity.this); //这里没有重写错误方法...正常来说是需要重写的... mqueue.add(new JsonObjectRequest(Method.GET,"http://192.168.199.172:8080/JSP/Json_1.txt",url,new Listener<JSONObject>(){ @Override public void Response(JSONObject response){ //这里我们可以看到我们获取的就是JsonObject了...我们可以在这里进行解析,从而获取想要的数据... List<HasnMap<String,String>>list=new ArrayList<HashMap<String,String>>(); String s[]=new String[]{"userid","username","userpassword"}; try{ JSONArray array=response.getJSONArray("user"); for(int i=0;i<array.size();i++){ JSONObject object=array.opt(i); Map<String,String>map=new HashMap<String,String>(); for(String str:s){ map.put(str,object.get(str)); } list.add(map); for(int i=0;i<list.size();i++){ for(int j=0;j<Json_id.length;j++){ System.out.println(list.get(i).get(Json_id[j])); } } } }catch(Exception e){} } })); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }