簡體   English   中英

如何使用Volley Android發送原始文本數據

[英]How to send Raw text data using volley android

什么是有效的:下面使用volley的方法適用於發送JSON原始數據


我要執行的操作:嘗試發送原始文本數據,無法執行。 如何實現此目標....下面的快照顯示了我要發送的郵遞員數據

在此處輸入圖片說明


 public <T> void MasterWordListCall(Class<T> theClass, Activity context, int position,
                                       String mApi, int mGetOrPost, JSONObject stringObjectMap) {

        //progress = CommonFunctions.showLoadingDialog(progress, ActDrawAreaTwo.this);

        Map<String, String> params = new HashMap<>();
        Map<String, String> headers = new HashMap<String, String>();

        headers.put("Content-Type", "application/json");

        Iterator it = params.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pairs = (Map.Entry) it.next();
            Log.d(context.getClass().getCanonicalName(), "params - " + pairs.getKey() + ", " + pairs.getValue());
        }

        String url = AppConstants.SERVER_URL  + mApi + "/";

        Log.d("FinalUrl:->", url);

        RequestQueue requestQueue = Volley.newRequestQueue(ActLogin.this);
        CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST,
                url,
                stringObjectMap,
                params,
                headers,
                this.createRequestSuccessListener(),
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progress.dismiss();
                    }
                });
        RequestQueueHelper.addToRequestQueue(jsObjRequest, "");
        //requestQueue.add(jsObjRequest);

        //new JSONObject(params)
    }



    private Response.Listener<JSONObject> createRequestSuccessListener() {

        return new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {

                CommonFunctions.dismissLoadingDialog(progress);
                if(response!=null){

                    Toast.makeText(ActLogin.this,"Success",Toast.LENGTH_LONG);

                   /*Intent mIntent  = new Intent(ActLogin.this,ActSuccess.class);
                    mIntent.putExtra("data", mWord);
                    mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(mIntent);
                    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                    finish();*/

                }else if(response==null){

                }

            }
        };
    }

CustomRequest.java

public class CustomRequest extends JsonObjectRequest {

    private Listener<JSONObject> listener;
    private Map<String, String> params;
    private Map<String, String> headers;

    public CustomRequest(int put, String url,
                         JSONObject stringObjectMap, Map<String, String> params,
                         Map<String, String> headers,
                         Response.Listener<JSONObject> reponseListener,
                         ErrorListener errorListener) {
        //super(put, url, errorListener);

        super(put, url, (stringObjectMap == null) ? null : stringObjectMap.toString(), reponseListener,
                errorListener);
        this.listener = reponseListener;
        this.params = params;
        this.headers = headers;
    }

    /*public CustomRequest(int method,
                         String url,
                         Map<String, String> params,
                         Map<String, String> headers,
                         Listener<JSONObject> reponseListener,
                         ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
        this.headers = headers;
    }*/

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        return headers != null ? headers : super.getHeaders();
    }

    @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) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }
}

您可以使用截擊字符串請求發送純文本數據

   public void sendDataString(final VolleyCallback callback, final String appData) {
            String uri = String.format(Locale.US, URL);
            StringRequest stringRequest = new StringRequest(Request.Method.POST, uri,
                    new com.android.volley.Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.d(TAG, "String Success :" + response);
                        }
                    },
                    new com.android.volley.Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.d(TAG, "String  Error In Request :" + error.toString());

                        }
                    }) {
                @Override
                protected Response<String> parseNetworkResponse(NetworkResponse response) {
                    String StringResponse = "";
                    try {
                        StringResponse = new String(response.data,
                                HttpHeaderParser.parseCharset(response.headers));
                        HttpHeaderParser.parseCharset(response.headers);
                        Log.d(TAG, "Response Headers " + response.headers);
                        Log.d(TAG, "String Status Code " + response.statusCode);
                        Log.d(TAG, "String response data :  " + new String(response.data));
                    } catch (UnsupportedEncodingException e) {
                        return Response.error(new ParseError(e));
                    }
                    callback.onSuccess(response.data.toString(), response.statusCode);
                    return super.parseNetworkResponse(response);
                }

                @Override
                public byte[] getBody() throws AuthFailureError {
                    return appData.getBytes();
                }

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<String, String>();
                    headers.put("Content-Type", "application/text");
                    headers.put("charset", TYPE_UTF8_CHARSET);
                    return headers;
                }
            };
            stringRequest.setRetryPolicy(defaultRetryPolicy);
//if you are using OkHTTP with Stack.
            ApplicationController.getInstance().addToRequestQueue(stringRequest, TAG);
        }

其中appData是需要發送到服務器的原始數據。 callBack不是強制性的,但是如果在其他一些類中調用該方法並等待響應,則是必需的,因為volley是異步的。

在不推薦使用API​​ 22 HTTP Client后,在Volley中使用; 確保您有其他替代方法可以解決此問題。

嘗試這個。

String url = "";
    RequestQueue queue = Volley.newRequestQueue(this);
    StringRequest request = new StringRequest(Request.Method.GET, url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // Is the responds is success
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // Is the responds is fail
            }
        }
    ){
        @Override
        protected Map<String, String> getParams() {
            Map<String,String> map = new HashMap<>();
            map.put("grant_type","SET_VALUE");
            // Add all parameters here
            return map;
        }
    };
    queue.add(request);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM