Android中Volley框架Get,POST封裝使用及自動解析JSON
阿新 • • 發佈:2019-01-31
DEMO下載地址:http://download.csdn.net/detail/song2810106/9471616
網路請求使用的Volley.Jar.Json解析使用的谷歌的Gson,此封裝可以 重複呼叫 一個網路請求,並可以自動解析JSON為一個物件,我們都知道,在基本使用Volley的時候,每個Activity 都會去建立一個 網路 請求,這樣顯得程式碼很 臃腫 難看。而且有大量的 冗餘程式碼。 VolleyDemo這個類 解決了 在多個Activity 中 呼叫 這個類 就可以 實現 網路 請求,程式碼簡潔。
封裝採用了 介面回撥的方式。
首先是 MainActivity 用來實現呼叫網路請求的
volleydemo 是一個封裝了Volley請求的單利模式的類,
在MainActivity中 volleyInterface 屬於自定義回撥介面
public class MainActivity extends AppCompatActivity { HashMap<String, String> map ; public static String TAG = "TAG"; //URL地址 private String url = "http://api.weidu51.com/v2000/user/login"; private String url2= "http://api.weidu51.com/v2000/user/login?account=test1&password=123123"; private volleyDemo volleydemo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); volleydemo = volleyDemo.getVolleyDemo(MainActivity.this); map = new HashMap<String, String>(); map.put("account", "test1"); map.put("password", "123123"); //發起post請求 volleydemo.SendVolleyPostBean(url, map, new volleyInterface() { @Override public void ResponseResult(Object jsonObject) { userTestBean userTestBean = (com.demo.binbin.myvolley.com.binbin.volley.userTestBean) jsonObject; Log.i("TAG", "POST請求成功" + "姓名:"+userTestBean.getData().getRealname()); } @Override public void ResponError(VolleyError volleyError) { Log.i("TAG", "POST請求失敗" + volleyError.toString()); } }, userTestBean.class); volleyInterface volleyInterface = new volleyInterface() { @Override public void ResponseResult(Object jsonObject) { userTestBean userTestBean = (com.demo.binbin.myvolley.com.binbin.volley.userTestBean) jsonObject; Log.i("TAG", "GET請求成功" + "姓名:"+userTestBean.getData().getRealname()); } @Override public void ResponError(VolleyError volleyError) { Log.i("TAG", "GET請求失敗" + volleyError.toString()); } }; //發起get請求 volleyDemo.getVolleyDemo(MainActivity.this).SendVolleyGetBean(url2, volleyInterface,userTestBean.class); volleyDemo.getVolleyDemo(MainActivity.this).SendVolleyGetJsonobject(url2, new volleyInterface() { @Override public void ResponseResult(Object jsonObject) { JSONObject jsonObject1 = (JSONObject)jsonObject; Log.i("TAG", "GET請求成功" + "JsonToString"+jsonObject1.toString()); } @Override public void ResponError(VolleyError volleyError) { } }, userTestBean.class); } }
下面的
volleyInterface 是自定義回撥介面
/** * Created by Administrator on 2016-03-08. */ public interface volleyInterface { void ResponseResult(Object jsonObject); void ResponError(VolleyError volleyError); }
volleyDemo 類是封裝Get,POST的核心類
/** * Created by binbin on 2016-03-08. */ public class volleyDemo { private Gson g= new Gson(); private static RequestQueue requestQueue = null; private static volleyDemo volleyDemo; public static volleyDemo getVolleyDemo(Context context) { if (volleyDemo == null) volleyDemo = new volleyDemo(); requestQueue = Volley.newRequestQueue(context); return volleyDemo; } /** * Post請求 url,HashMap,volleyInterface,Class * 以實體類形式返回,然後進行強轉 * */ public void SendVolleyPostBean(String url, HashMap<?, ?> hashMap, final volleyInterface volleyInterface, final Class<?> aClass) { Log.i(MainActivity.TAG, "開始請求"); JSONObject jsonObject = new JSONObject(hashMap); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, jsonObject, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { Object userBean = (Object) g.fromJson(jsonObject.toString(),aClass); volleyInterface.ResponseResult(userBean); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { volleyInterface.ResponError(volleyError); Log.i(MainActivity.TAG, "請求錯誤"); } }); AddrequestQueue(jsonObjectRequest, true); } /** * GET請求 url,volleyInterface,Class * 以實體類形式返回,然後進行強轉 * **/ public void SendVolleyGetBean(String url, final volleyInterface volleyInterface,final Class<?> aClass) { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { Object userBean = (Object) g.fromJson(jsonObject.toString(),aClass); volleyInterface.ResponseResult(userBean); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { volleyInterface.ResponError(volleyError); Log.i(MainActivity.TAG, "請求錯誤"); } }); AddrequestQueue(jsonObjectRequest, true); } /** * POST請求 url,volleyInterface,Class * 以JSON形式返回,然後進行強轉 為JSONobject * **/ public void SendVolleyPostJsonobject(String url, final volleyInterface volleyInterface,final Class<?> aClass) { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { volleyInterface.ResponseResult(jsonObject); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { volleyInterface.ResponError(volleyError); Log.i(MainActivity.TAG, "請求錯誤"); } }); AddrequestQueue(jsonObjectRequest, true); } /** * GET請求 url,volleyInterface,Class * 以JSON形式返回,然後進行強轉 為JSONobject * **/ public void SendVolleyGetJsonobject(String url, final volleyInterface volleyInterface,final Class<?> aClass) { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { volleyInterface.ResponseResult(jsonObject); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { volleyInterface.ResponError(volleyError); Log.i(MainActivity.TAG, "請求錯誤"); } });
加入佇列 及設定 請求時間
AddrequestQueue(jsonObjectRequest, true);
}
此方法是 Volley配置方法 public void AddrequestQueue(JsonObjectRequest req, boolean issave) { // 設定超時時間 req.setRetryPolicy(new DefaultRetryPolicy(3 * 1000, 1, 1.0f)); // 是否開啟快取; req.setShouldCache(issave); // 將請求加入佇列 requestQueue.add(req); // 開始發起請求 requestQueue.start(); }