Android 谷歌 開源 通信框架 VOLLEY(二)——String/Json處理

二、功能請求

大概知道了volley是什麼了,第二章我們就來看下volley,自己默認有哪些功能。
這裏寫圖片描述

1.StringRequest
這裏寫圖片描述

package com.example.VolleyDemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import static com.android.volley.Response.*;

public class StringActivity extends Activity {

    private TextView mStringResult;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_string);

        mStringResult = (TextView) findViewById(R.id.StringTxt);
    }

    RequestQueue mQueue;
    @Override
    protected void onStart() {
        super.onStart();

        /********************4步驟********************/
        //1.創建一個RequestQueue對象
        mQueue = Volley.newRequestQueue(this);

        //2.啓動RequestQueue
        mQueue.start();//請求隊列開始進行調度

        //3.創建一個StringRequest
        StringRequest stringRequest = new StringRequest("http://www.baidu.com",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.d("TAG", response);
                        mStringResult.setText(response);
                    }
                }, new ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
                Toast.makeText(StringActivity.this, "網絡錯誤", Toast.LENGTH_SHORT).show();
            }
        });

        //4.將StringRequest對象添加到RequestQueue裏面
        stringRequest.setTag("StringActivity");
        mQueue.add(stringRequest);
        /******************************************/
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mQueue!=null){
            mQueue.cancelAll("StringActivity");
        }
    }
}

RequestQueue是一個請求隊列對象,它可以緩存所有的HTTP請求,然後按照一定的算法併發地發出這些請求。

RequestQueue內部的設計就是非常合適高併發的,因此我們不必爲每一次HTTP請求都創建一個RequestQueue對象,這是非常浪費資源的,基本上在每一個需要和網絡交互的Activity中創建一個RequestQueue對象就足夠了。

Volley的比較核心的一個類就是RequestQueue,一個請求隊列。它負責管理工作線程,讀寫緩存,和解析、分發響應(具體操作還是由具體的類實現),即將發出的Http請求都會首先聚集在這裏等待工作線程來實現請求。RequestQueue可以被看成一艘載滿Http請求的航空母艦,而工作線程就是彈射器嘍。

1.獲取RequestQueue(得到一艘航母,可以是自己造的,也可以是委託別人造的,下面會提到)
2.實例化一個Request(得到一架飛機,你也知道飛機又很多類型啦)
3.將Request加入RequestQueue,等待工作線程將其發送出去(把飛機從機庫升上起飛甲板,等待彈射器把它扔出去)
起飛偵察機-發出GET請求

但是但是StringRequest中並沒有提供設置POST參數的方法,但是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來獲取POST參數,那麼解決方法自然也就有了,我們只需要在StringRequest的匿名類中重寫getParams()方法,在這裏設置POST參數就可以了.
這裏寫圖片描述

2.JsonRequest
這裏寫圖片描述

package com.example.VolleyDemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;

import static com.android.volley.Response.*;

public class JsonActivity extends Activity {

    private TextView mJsonResult;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);

        mJsonResult = (TextView) findViewById(R.id.JsonTxt);
    }

    RequestQueue mQueue;
    @Override
    protected void onStart() {
        super.onStart();

        /*******************4步驟***********************/
        //1.創建一個RequestQueue對象
        mQueue = Volley.newRequestQueue(this);

        //2.啓動RequestQueue
        mQueue.start();

        //3.創建一個JsonObjectRequest
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json", null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("TAG", response.toString());
                        try {
                            mJsonResult.setText(response.getString("count"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
                Toast.makeText(JsonActivity.this, "網絡錯誤", Toast.LENGTH_SHORT).show();
            }
        });

        //4.將JsonObjectRequest對象添加到RequestQueue裏面
        mQueue.add(jsonObjectRequest);
        /******************************************/
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(mQueue!=null){
            mQueue.cancelAll(this);
        }
    }
}
發佈了405 篇原創文章 · 獲贊 67 · 訪問量 118萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章