1. 程式人生 > >Volley及FastJson的簡單使用

Volley及FastJson的簡單使用

Volley的簡單使用
介紹:Volley是Google開發的一個進行聯網操作的框架,一般針對於聯網的內容比較小的時候使用起來會非常方便。步驟如下:
1.將Volley的jar包匯入到bins目錄的檔案下,在android studio中一定要記得還要手動進行一下新增。
2.RequestQueue  定義一個成員變數RequestQueue物件requestQueue,一般在oncreate()方法中進行建立,RequestQueue

requestQueue=Volley.newRequestQueue(this);
3.在合適的方法中進行請求操作,比如在Button的點選事件中進行Get請求,針對不同的返回資料型別,一般有StringRequest,

JsonObjectRequest,ImageRequest三種請求方式,以StringRequest為例:StringRequest stringRequest=new StringRequest(參

數一,引數二,引數三,引數四);
引數一:請求方法,如:StringRequest.Method.GET     
引數二:請求地址,url
引數三:Listener型別 ,接收網路響應的介面,即只要得到本次請求對應的返回結果就會執行此介面中的onResponse方法。
引數四:ErrorListener型別,用於接收當網路請求的過程中一旦發生了什麼錯誤,就會呼叫本介面中的onErrorResponse方法。
4.設定請求Tag,以方便解除,如:stringRequest.setTag("GET");
5.將請求新增到請求對列中,執行網路任務。方法為:requestQueue.add(stringRequest)。
沒有該方法,將無法進行聯網下載


6.Post方式相對Get方式有一些不同,主要在於:請求條件的指定必須在StringRequest物件的後面新增{},並且
在{}內重寫getParams方法,該方法的返回值就是所有的請求條件,請求條件用Map型別來進行鍵值對的儲存,返回map即可


7.JsonObjectRequest的GET請求方式和StringRequest方式基本相同,POST方式不同之處在於:首先,需要生成一個JSONObject類

型的物件,並通過put方法將請求條件通過鍵值對的方式儲存,然後在生成JsonObjectRequest物件時,通過一個五個引數的構造方

法,第三個引數就是JSONObject型別的帶有請求條件的物件,其他四個引數和StringRequest相同。
<span style="font-size:18px;">public class MainActivity extends Activity {

    RequestQueue queue;

    private String url = "http://mobapi.meilishuo.com/2.0/express/recommend_entrance?imei=000000000000000&mac=08%3A00%3A27%3A51%3A2e%3Aaa&qudaoid=11601&access_token=6c5428735c0a46cbd4bd0ac53fd9da30&st=1429002510&_sign=bf62212d98e50df072288c9e86077939467f9b10";

    TextView tv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv); 
        queue = Volley.newRequestQueue(this);
    }

    public void click(View v) {
        switch (v.getId()) {
            case R.id.stringGet:  //GET請求的處理
                StringRequest request = new StringRequest(StringRequest.Method.GET,
                        url,
                        new Response.Listener<String>() {
                            //引數代表本次網路請求的結果
                            @Override
                            public void onResponse(String s) {
                                tv.setText(s);
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError volleyError) {
                                Toast.makeText(MainActivity.this, "出錯原因:" +
                                        volleyError.getMessage(), Toast.LENGTH_SHORT)
                                        .show();
                            }
                        });

                //三,給請求物件設定tag標識
                request.setTag("get");
                //四,將請求新增到請求佇列中,執行網路請求
                queue.add(request);
                break;
            case R.id.stringPost:  //實現post請求

                StringRequest post = new StringRequest(StringRequest.Method.POST,
                        "http://mobapi.meilishuo.com/2.0/express/recommend_entrance",
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String s) {
                                tv.setText(s);
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError volleyError) {

                            }
                        }) {
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {

                        //將請求條件封裝到map物件中
                        Map<String, String> map = new HashMap<String, String>();
                        map.put("imei", "000000000000000");
                        map.put("mac", "08%3A00%3A27%3A51%3A2e%3Aaa");
                        map.put("qudaoid", "11601");
                        map.put("access_token", "6c5428735c0a46cbd4bd0ac53fd9da30");
                        map.put("st", "1429002510");
                        map.put("_sign", "bf62212d98e50df072288c9e86077939467f9b10");
                        return map;
                    }
                };

                post.setTag("post");
                queue.add(post);
                break;
            case R.id.jsonPost:
                JSONObject object = new JSONObject();

                try {
                    object.put("imei", "000000000000000");
                    object.put("mac", "08%3A00%3A27%3A51%3A2e%3Aaa");
                    object.put("qudaoid", "11601");
                    object.put("access_token", "6c5428735c0a46cbd4bd0ac53fd9da30");
                    object.put("st", "1429002510");
                    object.put("_sign", "bf62212d98e50df072288c9e86077939467f9b10");
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                JsonObjectRequest jsonPost = new JsonObjectRequest(
                        JsonObjectRequest.Method.POST,
                        "http://mobapi.meilishuo.com/2.0/express/recommend_entrance",
                        object,//jsonObject型別的物件,此物件用於設定本次網路請求的請求條件
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject jsonObject) {
                                tv.setText(jsonObject.toString());
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError volleyError) {

                            }
                        }
                );
                jsonPost.setTag("jsonpost");
                queue.add(jsonPost);
                break;
        }
    }
}
</span>
FastJson的簡單使用
FastJson是阿里巴巴公司開發的Json資料解析框架,號稱解析資料最快。使用方法:
1.導jar包
2.一般在獲得json資料的後進行資料的載入解析操作,一般是在JsonObjectRequest第三個引數的回撥方法中呼叫
 但是在呼叫之前,第一步要對解析的資料進行型別封裝,屬性封裝一定要先看看解析的格式和型別,一般此時會有JSONJArray類

型的屬性,一定再對該型別進行類的封裝,直到都為單一屬性即可。此時,一定要對封裝的類進行一個無參的構造方法。
 比如:MeLiShuo ms =  com.alibaba.fastjson.JSONObject.parseObject(jsonObject.toString(),MeLiShuo.class);
   美麗說資料介面型別,引數一為json資料,引數二為資料型別.class
       list.addAll(ms.getData());Data為其ArrayJSON型別,有過封裝之後,傳入list集合,在介面卡中進行載入。