Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unexpected response code 500 for POST method

I am doing an update on the old project & I don't have much knowledge of Android as of now. In project we have Comments section on product.

For comment after sending earlier we had return as 0 (some error) & 1 (success).

Below is the code we were using.

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    null, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(
            JSONObject response) {

        Log.d("response done", "done===" + response);

        mloading.setVisibility(View.GONE);
        if (response != null) {
            Comment obj = new Comment();
            JSONObject jsonObject = response;
            try {
                obj.setComment(jsonObject
                        .getString("Comment"));

Now we have changed the return object from 0/1 to user object.

Does this need need to update JsonObjectRequest to GJSON request? Or object will also get parsed with JsonObjectRequest?

I am asking because when I execute above, I get error as below.

01-25 12:30:21.754: E/Volley(16487): [10114] BasicNetwork.performRequest: 
Unexpected response code 500 for 
http://new.souqalharim.com/add/CommentForMerchant

Any idea why I am getting this error?

Note: This URL is working fine for iPhone application.


Edit 1

This is post method, so full url is not there. There are few more parameters to add like ?comment=MyComment&userId=123&productId=234. As it is post I am not adding parameters in actual url.

I have those in another methods

@Override
protected Map<String, String> getParams()
        throws AuthFailureError {
    Map<String, String> params = new HashMap<String, String>();
    params.put("productId", productId.toString());
    params.put("userId",
            mSessionManager.getUserCode().toString());
    params.put("comment", GlobalFunctions
            .EncodeParameter(med_comments
                    .getText().toString()));



    return params;
}

Full url is as below.

http://new.souqalharim.com/add/CommentForUser?productId=325&userId=5&comment=abcd

I tested this in Mozilla RESTClient and it works fine.


Edit 2

After checking further I found protected Map<String, String> getParams() throws AuthFailureError { is not getting called. Any idea why this is happening?

like image 716
user3102156 Avatar asked Jan 25 '15 09:01

user3102156


1 Answers

The problem is below.

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    null, new Response.Listener<JSONObject>() {
    ^^^^

It should be

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    new JSONObject(params), new Response.Listener<JSONObject>() {
    ^^^^^^^^^^^^^^^^^^^^^^

Copy code from protected Map<String, String> getParams() before final JsonObjectRequest.

That's it!!!

Reason is as below.

The JsonObjectRequest is extended JsonRequest which override getBody() method directly, so your getParam() would never invoke, I recommend you extend StringRequest instead of JsonObjectRequest.

your can check this answer for more details.

like image 122
Fahim Parkar Avatar answered Oct 05 '22 05:10

Fahim Parkar