Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unexpected response code 500 URL API Android app

I have get problem "Unexpected response code 500", when I access URL API.

This my code with volley library:

String url= "http://103.241.24.35/android/android_login_api/index.php";

 public void detailURL(String url) {
            Log.v("Android Spinner JSON Data Activity", url);
             queue = Volley.newRequestQueue(this);
            StringRequest sr = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    ProgressLoadStartLogin.setVisibility(View.GONE);
                    displaystatis_kontenDetail(response);
                    btn_enable();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    if( error instanceof NetworkError) {
                    } else if( error instanceof ServerError) {
                    } else if( error instanceof AuthFailureError) {
                    } else if( error instanceof ParseError) {
                    } else if( error instanceof NoConnectionError) {
                    } else if( error instanceof TimeoutError) {                     
                    }
                    statusKoneksi();
                    btn_enable();
                    ProgressLoadStartLogin.setVisibility(View.GONE);
                }
            }){
                @Override
                protected Map<String,String> getParams(){
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("tag",Variabel.login_tag);
                    params.put("username",user);
                    params.put("password", password);
                    params.put("idgcm",GCMid);
                    return params;
                }

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("Content-Type","application/x-www-form-urlencoded");
                    return params;
                }
            };
            queue.add(sr);
        }

And I have set permission Internet on my manifest.

If URL I copy on browser, this is responded, I can accesses but if I put in my code, I get Error 500.

NB : URL this only IP address, cause this is IP address my VPS server and I'm not yet set domain my server...

How can I fix it? Sorry for my english.

like image 836
bukanamay Avatar asked Jun 10 '14 08:06

bukanamay


People also ask

What is a 500 error?

The HTTP 500 internal server error is a general-purpose error code that means there is a problem on the website's server, but the exact problem couldn't be definitively identified. In other words, the server doesn't know what the exact problem is.

How do I create a 500 internal server error?

Delete your browser's cookies. You can correct some 500 Internal Server Error issues by deleting the cookies associated with the site on which you're getting the error. After removing the cookie(s), restart the browser and try again. Troubleshoot as a 504 Gateway Timeout error instead.


2 Answers

This is not your library problem, browsers usually ignore error 500 in headers and display the content but volley dose not do that and call onErrorResponse. I think this is a server side application problem but you can get your response in onErrorResponse. in order to convince yourself you can add RESTClient mozilla add on and send your volley request and see the response. in the header it shows you error 500 internal server error but you can see the response in the body section

like image 190
mmlooloo Avatar answered Oct 13 '22 18:10

mmlooloo


Here is the solution for this error. Firstly you need to extend the Reponse class and modify the @Override protected Response parseNetworkResponse(NetworkResponse response) { like this :

public class CustomRequest extends Request {
    public CustomRequest(int method, String url, ErrorListener listener) {
        super(method, url, listener);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected Response parseNetworkResponse(NetworkResponse response) {
        System.out.println(response.statusCode);
        try {
            Log.d("custom response", "[raw json]: " + (new String(response.data)));
            Gson gson = new Gson();
            String json = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            return Response.success(response.data,
                HttpHeaderParser.parseCacheHeaders(response));

        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JsonSyntaxException e) {
            return Response.error(new ParseError(e));
        }
    }

    @Override
    protected void deliverResponse(Object arg0) {
        // TODO Auto-generated method stub
    }
}

//--------------------------------------
//to make  request to server we need to use our custom Request like this :
JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest(
    CustomRequest.Method.POST, url, obj, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            ;
            try {
                Toast.makeText(

and in error listener :

@Override
public void onErrorResponse(VolleyError arg0) {
    Log.e("erro;r", "error");

    if(arg0.networkResponse.statusCode==500){
        Log.e("error", "" + new String(arg0.networkResponse.data));
        try {
            JSONObject obj = new JSONObject(new String(arg0.networkResponse.data));
            int codeErreur = obj.getInt("code_erreur");
            if (codeErreur == 501) {
                Drawable warning = (Drawable) MonEntretienApplication.getInstance().getResources().getDrawable(R.drawable.warning_red);
                warning.setBounds(new Rect(0, 0, warning.getIntrinsicWidth(), warning.getIntrinsicHeight()));
                email.setError("",warning);
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }           
like image 45
rabie Avatar answered Oct 13 '22 20:10

rabie