1. 程式人生 > >Android中Volley框架Get,POST封裝使用及自動解析JSON

Android中Volley框架Get,POST封裝使用及自動解析JSON

  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();
    }