2014-06-10 3 views
6

Ho riscontrato il problema "Codice di risposta inattesa 500", quando accedo all'API dell'URL.Codice di risposta imprevisto 500 URL API App per Android

Questo il mio codice con la libreria volley:

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); 
     } 

E io ho posto il permesso Internet sul mio manifesto.

Se URL copio nel browser, questo viene risposto, posso accessi, ma se ho messo nel mio codice, ottengo l'errore 500.

NB: URL questo unico indirizzo IP, perché questo è l'indirizzo IP il mio server VPS e io non sono ancora impostato dominio mio server ...

Come posso risolvere il problema? Mi scusi per il mio inglese.

+0

Per browser vuoi dire il browser sul tuo cellulare? – Byron

+0

si signore, sono in prova sul mio telefono cellulare – bukanamay

+0

@bukanamay Il problema è stato risolto? E seconda domanda: questa intestazione è necessaria? –

risposta

5

Questo non è un problema di libreria, i browser di solito ignorano l'errore 500 nelle intestazioni e visualizzano il contenuto, ma la dose di scarica non lo fa e chiama suErrorResponse. Penso che questo sia un problema applicativo lato server ma puoi ottenere la tua risposta in onErrorResponse. per convincere te stesso puoi aggiungere RESTClient mozilla add on e inviare la tua richiesta di volley e vedere la risposta. nell'intestazione mostra errore 500 interno del server errore ma è possibile vedere la risposta nella sezione corpo

+0

Sì, questo è giusto, ممنون –

+0

Posso vedere che funziona nel browser. Ma come gestire in Volley? –

+0

Affrontare lo stesso problema non ottenere la soluzione. Lo stesso servizio funziona bene su ios – CrazyMind

1

Ecco la soluzione per questo errore. In primo luogo è necessario estendere la classe Reponse e modificare il @Override protected Response parseNetworkResponse(NetworkResponse response) { in questo modo:

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(

e per errore ascoltatore:

@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(); 
     }   
+0

Questo lavoro è stato per qualcuno? – NovusMobile