android - স্ট্রিং বডি সহ ভোলি ব্যবহার করে একটি পোষ্ট অনুরোধ কীভাবে প্রেরণ করবেন?




web-services rest (3)

আমি একটি অ্যান্ড্রয়েড অ্যাপ বিকাশ করছি যা আমার লেখা একটি রেস্টস্টুল ওয়েব পরিষেবাদির সাথে যোগাযোগ করে। GET পদ্ধতির জন্য Volley ব্যবহার করা দুর্দান্ত এবং সহজ, তবে আমি POST পদ্ধতিতে আঙুল রাখতে পারি না।

আমি অনুরোধের মুখ্য অংশে একটি String দিয়ে একটি POST অনুরোধ পাঠাতে চাই এবং ওয়েব পরিষেবাদির কাঁচা প্রতিক্রিয়া পুনরুদ্ধার করতে চাই (যেমন 200 ok , 500 server error )।

আমি যা খুঁজে পেতে পারি তা হ'ল StringRequest যা ডেটা (বডি) দিয়ে প্রেরণ করতে দেয় না এবং এটি পার্সড String প্রতিক্রিয়া পেতে আমাকে সীমাবদ্ধ করে। আমি JsonObjectRequest জুড়ে JsonObjectRequest যা ডেটা গ্রহণ করে (বডি) তবে একটি পার্সড JSONObject প্রতিক্রিয়া পুনরুদ্ধার করে।

আমি নিজের প্রয়োগটি লেখার সিদ্ধান্ত নিয়েছি, তবে ওয়েব পরিষেবাদি থেকে কাঁচা প্রতিক্রিয়া পাওয়ার কোনও উপায় খুঁজে পাচ্ছি না। আমি এটা কিভাবে করবো?


আমি কলটি স্বেচ্ছাসেবীর জন্য একটি ফাংশন করি। আপনার কেবল যুক্তিগুলি পাস করতে হবে

public void callvolly(final String username, final String password){
    RequestQueue MyRequestQueue = Volley.newRequestQueue(this);
    String url = "http://your_url.com/abc.php"; // <----enter your post url here
    StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //This code is executed if the server responds, whether or not the response contains data.
            //The String 'response' contains the server's response.
        }
    }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately.
        @Override
        public void onErrorResponse(VolleyError error) {
            //This code is executed if there is an error.
        }
    }) {
        protected Map<String, String> getParams() {
            Map<String, String> MyData = new HashMap<String, String>();
            MyData.put("username", username);             
            MyData.put("password", password);                
            return MyData;
        }
    };


    MyRequestQueue.add(MyStringRequest);
}

আপনি নিম্নলিখিত কোডটি উল্লেখ করতে পারেন (অবশ্যই আপনি নেটওয়ার্কের প্রতিক্রিয়ার আরও বিশদ পেতে কাস্টমাইজ করতে পারেন):

try {
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    String URL = "http://...";
    JSONObject jsonBody = new JSONObject();
    jsonBody.put("Title", "Android Volley Demo");
    jsonBody.put("Author", "BNK");
    final String requestBody = jsonBody.toString();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("VOLLEY", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VOLLEY", error.toString());
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
                return requestBody == null ? null : requestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
                // can get more details such as response.headers
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };

    requestQueue.add(stringRequest);
} catch (JSONException e) {
    e.printStackTrace();
}

Name = editTextName.getText().toString().trim();
Email = editTextEmail.getText().toString().trim();
Phone = editTextMobile.getText().toString().trim();


JSONArray jsonArray = new JSONArray();
jsonArray.put(Name);
jsonArray.put(Email);
jsonArray.put(Phone);
final String mRequestBody = jsonArray.toString();

StringRequest stringRequest = new StringRequest(Request.Method.PUT, OTP_Url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        Log.v("LOG_VOLLEY", response);

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("LOG_VOLLEY", error.toString());
    }
}) {
    @Override
    public String getBodyContentType() {
        return "application/json; charset=utf-8";
    }

    @Override
    public byte[] getBody() throws AuthFailureError {
        try {
            return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
        } catch (UnsupportedEncodingException uee) {
            VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
            return null;
        }
    }

};
stringRequest.setShouldCache(false);
VollySupport.getmInstance(RegisterActivity.this).addToRequestque(stringRequest);




android-volley