Skip to content Skip to sidebar Skip to footer

Android Volley - Post Request - Not Working Online

I was trying to make a POST request through Volley. It is working totally fine in my localhost but when i moved it to webserver the response is empty. Java Code RequestQueue queue

Solution 1:

I had faced same problem previously and fixed by using custom request queue.

first create custom request class CustomRequest.java

import java.io.UnsupportedEncodingException;
import java.util.Map;    
import org.json.JSONException;
import org.json.JSONObject;    
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;

publicclassCustomRequestextendsRequest<JSONObject> {

privateListener<JSONObject> listener;
privateMap<String, String> params;

publicCustomRequest(String url, Map<String, String> params,
        Listener<JSONObject> reponseListener, ErrorListener errorListener) {
    super(Method.GET, url, errorListener);
    this.listener = reponseListener;
    this.params = params;
}

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

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

@OverrideprotectedResponse<JSONObject> parseNetworkResponse(NetworkResponse response) {
    try {
        String jsonString = newString(response.data,
                HttpHeaderParser.parseCharset(response.headers));
        returnResponse.success(newJSONObject(jsonString),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        returnResponse.error(newParseError(e));
    } catch (JSONException je) {
        returnResponse.error(newParseError(je));
    }
}

@OverrideprotectedvoiddeliverResponse(JSONObject response) {
    // TODO Auto-generated method stub
    listener.onResponse(response);
}
}

Then i performed request as this

Map<String, String> params = newHashMap<String, String>();
params.put("name", name);
params.put("email", phone);
params.put("phone", email);



CustomRequest jsonObjReq = newCustomRequest(
                Method.POST,
                Const.URL_SEND_FEEDBACK,params,
                newResponse.Listener<JSONObject>() {
                    @OverridepublicvoidonResponse(JSONObject jsonObject) {

                    }
                },
                newResponse.ErrorListener() {
                    @OverridepublicvoidonErrorResponse(VolleyError volleyError) {

                    }
                }) {
            publicMap<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = newHashMap<String, String>();
                //params.put("Content-Type", "application/x-www-form-urlencoded"); not used thisLog.d("getHeaders", params.toString());
                return params;
            }


        };

AppController.getInstance().addToRequestQueue(jsonObjReq);

Solution 2:

Try adding charset=utf-8 to it. After much searching, that was what worked for me.

Credit: http://envyandroid.com/android-volley-empty-parameters/

RequestQueue queue = Volley.newRequestQueue(this);
    StringRequest sr = newStringRequest(Request.Method.POST, url, newResponse.Listener<String>() {
        @OverridepublicvoidonResponse(String response) {
            pd.dismiss();
            Log.d("Response: ", response.toString());
        }
    }, newResponse.ErrorListener() {
        @OverridepublicvoidonErrorResponse(VolleyError error) {
            Log.d("Error: ", error + "");
        }
    }) {
        @OverrideprotectedMap<String, String> getParams() {
            Map<String, String> params = newHashMap<String, String>();
            params.put("name", name);
            params.put("phone", phone);
            params.put("email", email);

            Log.d("getParams", params.toString());
            return params;
        }

        @OverridepublicMap<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = newHashMap<String, String>();
            params.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

            Log.d("getHeaders", params.toString());
            return params;
        }
    };
    queue.add(sr);

Post a Comment for "Android Volley - Post Request - Not Working Online"