Android--Volley---RequestQueue學習

首先我們來看幾個知識點
RequestQueue的用法
1.創建請求隊列。
2.創建StringRequest對象。
3.將StringRequest對象添加到請求隊列中。

下面我們用一個小實例來講解
簡單的POST和GET兩種請求方式,要實現就需要第三方架包,導入Volley架包,沒有的可以跟我要。因爲Volley一直是由谷歌維護的,所以性能方面還是比較優秀的。讓你無需考慮建立數據庫和線程,很方便。
來來來廢話不多說,直接上代碼:
這是一個工具包,還是蠻好用的,喜歡就拿走

public class StringPostRequest extends StringRequest {
    private Map<String, String> params;
    private  Map<String,String> header;
    //往Map中放值
    public StringPostRequest(String url, Listener<String> listener,
                             Response.ErrorListener errorListener) {
        super(Method.POST, url, listener, errorListener);
        params = new HashMap<String, String>();
        header = new HashMap<String,String>();
    }
    //回調
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        return header;
    }

    public void putHeaders(String key, String value){
        this.header.put(key, value);
    }

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

    public void putParams(String key, String value){
        this.params.put(key, value);
    }
}

同時我們需要聯網幫助包,寶寶自己寫的,還蠻好用的,數據是從API Store上獲取噠

public class UrlUtil {
    //獲取 頻道的網絡接口
    public static String channelUrl = "http://apis.baidu.com/showapi_open_bus/channel_news/channel_news";
    /*獲取 頻道對應新聞的網絡接口
      get 請求參數:
       channelId    : 新聞頻道id,必須精確匹配
       channelName  :新聞頻道名稱,可模糊匹配
       title        :新聞標題,模糊匹配
       page         :頁數,默認1。每頁最多20條記
       needContent  : 是否需要返回正文,1爲需要
       needHtml     :是否需要返回正文的html格式,1爲需要
     */
    public static String newsUrl = "http://apis.baidu.com/showapi_open_bus/channel_news/search_news";
    //獲取天氣接口
    public static String weatherUrl="http://apis.baidu.com/thinkpage/weather_api/suggestion";
    /*參數名   類型  必填  參數位置    描述  默認值
   location string  是   urlParam    所查詢的位置 beijing
   language string  否   urlParam    語言zh-Hans
   unit string  否   urlParam    單    c
   start string 否   urlParam    起始時間  0
   days string  否   urlParam    天數3
    */
}

正式的Activity

public class VolleyActivity extends AppCompatActivity implements View.OnClickListener{
    private Button bt;
    private TextView show;
    private RequestQueue queue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley);
        bt= (Button) findViewById(R.id.bt);
        show= (TextView) findViewById(R.id.show);
        //本類監聽 一定要有的,沒有不報錯,但是運行不出來
        bt.setOnClickListener(this);
        //初始化volley請求隊列
        queue= Volley.newRequestQueue(this);

    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if(id==R.id.bt){
            PostVolley();
        }
    }
    public void GetVolley(){
        //三個參數,第二個是訪問成功的監聽 第三個是訪問失敗的監聽
        String url="http://192.168.1.3:8080/HttpTest/index.jsp"+
                "?option=getUser&uName=jerehedu";
        StringRequest sr=new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
             show.setText(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
             show.setText(volleyError.getMessage());
            }
        });
        queue.add(sr);
    }
    public void PostVolley(){
        String url = UrlUtil.weatherUrl;
        final StringPostRequest spr=new StringPostRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                show.setText(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {


            }
        });
        spr.putHeaders("apikey","5b46143955a4b1ff1b470a94315625cd");

        queue.add(spr);
    }
}

佈局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.edu.jereh.android9.VolleyActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/bt"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/show"
        android:layout_below="@id/bt"
        />

</RelativeLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章