1. 程式人生 > >Android Volley框架的幾種post提交請求方式

Android Volley框架的幾種post提交請求方式

首先簡單描述一下Google的Android開發團隊在2013年推出的一個網路通訊框架Volley.它的設計目標是進行資料量不大,但通訊頻繁的網路操作,而對於大資料量的網路操作,比如下載檔案等,Volley的表現就不盡如人意。

在app開發中,我們最常見的就是從app客戶端向服務端發一個http請求.對於兩種基本的web請求方式get和post來說,get請求方式相對比較簡單,在此略過不表.本文重點描述一下通過volley進行幾種post提交的方式.

1.客戶端以普通的post方式進行提交,服務端返回字串

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

StringRequest stringRequest = new StringRequest(Request.Method.POST,httpurl,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, "response -> " + response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, error.getMessage(), error);
        }
    }) {
    @Override
    protected Map<String, String> getParams() {
        //在這裡設定需要post的引數
              Map<String, String> map = new HashMap<String, String>();  
            map.put("name1", "value1");  
            map.put("name2", "value2");  

          return params;
    }
};        

requestQueue.add(stringRequest);
2.客戶端以json串的post請求方式進行提交,服務端返回json串
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

Map<String, String> map = new HashMap<String, String>();  
map.put("name1", "value1");  
map.put("name2", "value2");  

JSONObject jsonObject = new JSONObject(params);
JsonRequest<JSONObject> jsonRequest = new JsonObjectRequest(Method.POST,httpurl, jsonObject,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d(TAG, "response -> " + response.toString());

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, error.getMessage(), error);
    }
    })
    {
    //注意此處override的getParams()方法,在此處設定post需要提交的引數根本不起作用
    //必須象上面那樣,構成JSONObject當做實參傳入JsonObjectRequest物件裡
    //所以這個方法在此處是不需要的
//    @Override
//    protected Map<String, String> getParams() {                
//          Map<String, String> map = new HashMap<String, String>();  
//            map.put("name1", "value1");  
//            map.put("name2", "value2");  
                
//        return params;
//    }
            
    @Override
    public Map<String, String> getHeaders() {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Accept", "application/json");
        headers.put("Content-Type", "application/json; charset=UTF-8");
                
        return headers;
    }
};
requestQueue.add(jsonRequest);
看了上面這段程式碼,會覺得volley這個框架實在是還不夠完善,使用JsonObjectRequest物件提交一個post請求,如果有引數需要提交,就必須以JSONObject的json串方式提交.
如果服務端並不支援這種方式呢?比如常見的spring mvc服務端,就很難支援json的請求方式.
那麼我們想實現這個目標,就需要使用下面給出的辦法.

3.客戶端以普通的post方式進行提交,服務端返回json串
首先在Activity類裡,繼承Request實現一個NormalPostRequest類
private class NormalPostRequest extends Request<JSONObject> {
    private Map<String, String> mMap;
    private Listener<JSONObject> mListener;

    public NormalPostRequest(String url, Listener<JSONObject> listener,ErrorListener errorListener, Map<String, String> map) {
        super(Request.Method.POST, url, errorListener);
            
        mListener = listener;
        mMap = map;
    }
    
    //mMap是已經按照前面的方式,設定了引數的例項
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return mMap;
    }
    
    //此處因為response返回值需要json資料,和JsonObjectRequest類一樣即可
    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
                
            return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

    @Override
    protected void deliverResponse(JSONObject response) {
        mListener.onResponse(response);
    }
}
接下來的呼叫方式和前面差不多,生成一個Request例項,加入佇列中即可.
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

Request<JSONObject> request = new NormalPostRequest(httpurl,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d(TAG, "response -> " + response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, error.getMessage(), error);
        }
    }, params);

requestQueue.add(request);
以上程式碼在android 4.3環境下測試通過.

相關推薦

Android Volley框架post提交請求方式

首先簡單描述一下Google的Android開發團隊在2013年推出的一個網路通訊框架Volley.它的設計目標是進行資料量不大,但通訊頻繁的網路操作,而對於大資料量的網路操作,比如下載檔案等,Volley的表現就不盡如人意。 在app開發中,我們最常見的就是從app客戶端

Android Volley框架post提交請求方式和探究POST、GET提交

首先簡單描述一下Google的Android開發團隊在2013年推出的一個網路通訊框架Volley.它的設計目標是進行資料量不大,但通訊頻繁的網路操作,而對於大資料量的網路操作,比如下載檔案等,Volley的表現就不盡如人意。 在app開發中,我們最常見的就是從app客戶端

RestTemplate中常見的請求方式

see 信息 book ren new 三個參數 body turn 表示 GET請求 第一種:getForEntity getForEntity方法的返回值是一個ResponseEntity<T>,ResponseEntity<T>是Spring對

Spring框架建立bean的方式

Spring框架下,Bean的建立和裝配非常的靈活,提供了三種主要的方式,並且相互見可以互相看見,也就是你可以隨意地採用你喜歡且合適的方式建立Bean,而不用擔心他們之間的相容問題。     一、使用XML顯示配置Bean      

SpringCloud之RestTemplate,常見的請求方式

https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服務的發現與消費一文中,當我們從服務消費端去呼叫服務提供者的服務的時候,使用了一個很好用的物件,叫做RestTemplate,當時我們只使

postman的資料提交方式,以及提交方式的介紹

    1、form-data:                     就是http請求中的multipart/form-data,它會將表單的資料處理為一

Android中的網路請求方式詳解

Android應用經常會和伺服器端互動,這就需要手機客戶端傳送網路請求,下面介紹四種常用網路請求方式,我這邊是通過Android單元測試來完成這四種方法的,還不清楚Android的單元測試的同學們請看Android開發技巧總結中的Android單元測試的步驟一文。 java

Android-Volley框架中的get和post方式

2013年Google在 I/O大會上釋出了Volley框架,它是Android平臺上的開源網路通訊庫,封裝了Http網路請求,非同步任務,快取,圖片下載等功能。特點是能使網路通訊更簡單,更快速,更穩定。尤其適合處理資料量不大,但是網路通訊頻繁的場景。 使用S

Android開發中有用的的日歷控件實現

顯示 lec 外觀 翻頁 frame 時間 lean android平臺 星期 我們大家都知道,在Android平臺3.0中才新增了日歷視圖控件,可以顯示網格狀的日歷內容,那麽對於3.0以下的版本要使用日歷控件只能借助第三方,目前用的最多的是CalendarView。 先簡

(轉載) Android常見的內存泄漏小結

tro ride callbacks 弱引用 command ext.get 網絡數據 指定 runnable 轉載: http://www.jb51.net/article/109261.htm 在Android程序開發中,當一個對象已經不需要再使用了,本該被回收時,而另

Android下的時間格式轉換

master .com ast mat 分鐘 || orm led else 更多更全的工具類,請參考github上的Blankj/AndroidUtilCode 將毫秒轉換為小時:分鐘:秒格式 public static String ms2HMS(int _ms){

高通方案的Android設備開機模式的進入與退出

內容 熱啟動 boot 操作 com 刷機 安裝 tor min 高通方案的Android設備主要有以下幾種開機模式,Android、EDL、Fastboot、Recovery和FFBM,其進入及退出的方式如下表。 開機模式 屏幕表現 冷啟

常見的POST提交資料方式

HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來向服務端提交資料,本文主要討論 POST 提交資料的幾種方式。 我們知道,HTTP 協議是以 ASCII 碼

Android Volley框架詳解

注:文章出自http://blog.csdn.net/guolin_blog/article/details/17482095,有興趣可以先去閱讀。 Volley簡介 對於Android系統網路通訊,我們知道目前用的最普遍的就是HttpClient和HttpURLConnection,但是H

application/json 四常見的 POST 提交資料方式

application/json 四種常見的 POST 提交資料方式 轉載宣告: 本文系轉載自以下兩篇文章: 四種常見的 POST 提交資料方式 作者: 滄海一滴 轉載僅為方便學習檢視,一切權利屬於原作者,本人只是做了整理和排版,如果帶來不便請聯絡我刪除。

Content-Type 四常見的 POST 提交資料方式

參考於: https://blog.csdn.net/tycoon1988/article/details/40080691(瞭解) 和: https://www.gy0929.com/wz/1420.html?_d_id=7ff19a05e92534d3df987da4343f71(設定) 和:

httpclient4 post提交請求亂碼問題解決

分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

zookeeper入門之curator框架--鎖的操作

package com.git.zookeeper.passwordmanager.lock; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import or

volley框架的使用post帶引數遇到的問題

關於volley用法的詳細介紹參考 http://www.cnblogs.com/caobotao/p/5071658.html http://blog.csdn.net/guolin_blog/article/details/17482095 以下是以上兩篇文章及在網上找到的關於v

java 常見傳送http請求案例

<span style="font-family: Arial, Helvetica, sans-serif;">import java.io.BufferedReader;</span> import java.io.FileOutputS