Android 學習筆記之Volley(六)實現擷取伺服器的字串響應...

來源:互聯網
上載者:User

標籤:

 

 

學習內容:

1.使用StringRequest實現擷取伺服器的字串響應...

 

  前幾篇一直都在對服務——響應過程的源碼進行分析,解析了整個過程,那麼Volley中到底實現了哪些請求才是我們在開發中需要進行使用的...Volley實現的東西其實並不是很多,它的主要功能是實現非同步進行網路請求和圖片載入,其實就是非同步載入解析Json資料,非同步擷取伺服器的字串資料,非同步實現網狀圖片的動態載入,還有一個請求就是清空緩衝的請求,不過使用的地方不是很多,主要還是前面三個方面,因此Volley相對於AndBase來說,其實還算是一個輕量級的架構,而AndBase涉及到的東西就更加的廣泛,全面,但是網路請求這一部分使用Volley基本算是夠用了...

1.StringRequest.java

package com.android.volley.toolbox;import com.android.volley.NetworkResponse;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import java.io.UnsupportedEncodingException;public class StringRequest extends Request<String> {    private final Listener<String> mListener; //請求成功的監聽...    //根據指定的請求方式和url建立一個StringRquest對象...    public StringRequest(int method, String url, Listener<String> listener,            ErrorListener errorListener) {        super(method, url, errorListener); //佈建要求方式,url,以及錯誤監聽..        mListener = listener; //設定成功監聽...    }    //根據指定的url來建立一個StringRequest對象,請求方式預設為GET..    public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {        this(Method.GET, url, listener, errorListener);    }    //這裡涉及到發送響應的過程了...表示整個請求的響應已經返回...    @Override    protected void deliverResponse(String response) {        mListener.onResponse(response);    }    //對響應的解析過程...    @Override    protected Response<String> parseNetworkResponse(NetworkResponse response) {        String parsed;        try {            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); //對響應資料封裝,解析字元集...        } catch (UnsupportedEncodingException e) {            parsed = new String(response.data);        }        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));//返回請求成功...    }}

  上面只是StringRequest的源碼實現,非常的簡單...那麼我們來具體的看看怎麼用...

  一般使用在簡單的回應程式式,返回一些基本的資料資訊,比如說使用者登入中,在發送Post請求發送使用者的帳號資訊和密碼的時候,需要伺服器調取資料庫進行相關尋找...在完成這個響應之後需要為服務端返迴響應資訊,一般就是以字串的形式進行發送的...

package com.example.oop;import com.android.volley.RequestQueue;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.ImageLoader.ImageCache;import com.android.volley.toolbox.NetworkImageView;import com.android.volley.toolbox.Volley;import android.os.Bundle;import android.app.Activity;import android.graphics.Bitmap;import android.support.v4.util.LruCache;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    public void init(){        RequestQueue queue=Volley.newRequestQueue(MainActivity.this); //首先建立一個請求隊列...     //然後需要向請求隊列中添加相關請求...     queue.add(new StringRequest("http://www.baidu.com/",new Listener    <StringRequest>(){        //請求成功,接收要求方法的重寫...        @Override        public void onResponse(String response){            System.out.println(response.toString());        }    },new ErrorListener(){ //請求失敗,對錯誤的擷取...        @Override        public void onErrorResponse(VolleyError error){            System.out.println(error.toString());        }    });          }        @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}  

  這裡我們想百度頁面發送了相關的請求,那麼毫無疑問,請求成功是必然的,那麼返回的東西就是百度頁面的原生資料,其實就是Html頁面代碼...那麼我們無法去解析這個頁面,但是瀏覽器卻是可以的,我們可以通過瀏覽器去載入這個頁面...這隻是一個簡單的小例子而已,目的是我們需要清楚,伺服器返回給我們的是什麼資料...

  第二個例子:

  這是一個中間用於過程處理的JSP方法...用於處理賬戶和密碼,只是一個簡單的方式,我們當然也可以通過它去串連資料庫,完善化這個函數...這裡只是一個簡單的小例子...

 <%  String name=request.getParameter("name");  String password=request.getParameter("password");  if("darker".equals(name)&& "49681888".equals(password)){      out.println("Receive name is:"+name);    out.println("Receive password is:"+password);%>    Your Message are right!  <%}else{      out.println("Receive name is:"+name);    out.println("Receive password is:"+password);%>    Your Message are wrong!  <%}%>  

  那麼Activity中需要通過Post請求發送請求參數,才能夠通過這個函數來進行下一步的判斷...由於Post請求中沒有傳遞參數的方法...但是我們可以通過重寫getParam()方法...來指定相關參數,服務端會自動調用getParam()中的參數....

package com.example.oop;//有一部分包沒有引用,在編寫的時候會自動引用的...import com.android.volley.RequestQueue;import com.android.volley.toolbox.Volley;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {     TextView tv;    String url="192.168.19.172:8080/JSP/post.jsp"    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv=(TextView)findViewById(R.id.tv_1);        init();    }    public void init(){        RequestQueue queue=Volley.newRequestQueue(MainActivity.this); //首先建立一個請求隊列...       queue.add(new StringRequest(Method.POST, url, new Listener<String>() {        @Override    public void onResponse(String response) {        // TODO Auto-generated method stub        System.out.println(response.toString());        tv.setText(response.toString()); //對擷取的資料進行顯示...    }}, new ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {        // TODO Auto-generated method stub          System.out.println(error.toString());                }}){      //在這個方法裡完成參數的相關傳遞....    @Override    protected Map<String, String>getParams() throws AuthFailureError{        Map<String, String>map=new HashMap<String, String>();        map.put("name", "darker");        map.put("password", "49681888");        return map;    }});}        @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }}

  使用Post請求來完成驗證,毫無疑問,這裡由於我們傳遞的參數時正確的,因此用戶端會擷取到Receive name is:darker,Receive password is:49681888,Your Message are right!這段資訊...

  StringRequest請求非常的簡單,涉及的東西也並不是很多,適合於發送網路請求來擷取相應的字串資料,呈遞給用戶端...

 

 

 

 

Android 學習筆記之Volley(六)實現擷取伺服器的字串響應...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.