2014-06-10 19 views
6

Tôi gặp sự cố "Mã phản hồi không mong đợi 500", khi tôi truy cập API URL.Mã phản hồi không mong muốn 500 Ứng dụng Android API URL

này mã của tôi với thư viện 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); 
     } 

Và tôi đã thiết lập sự cho phép Internet trên manifest của tôi.

Nếu URL sao chép trên trình duyệt, điều này được đáp lại, tôi có thể truy cập nhưng nếu tôi đặt trong mã của tôi, tôi nhận được Lỗi 500.

NB: URL duy nhất địa chỉ IP này, gây ra điều này là địa chỉ IP máy chủ VPS của tôi và tôi chưa đặt tên miền cho máy chủ của mình ...

Làm cách nào để khắc phục sự cố? Xin lỗi vì tiếng Anh của tôi.

+0

Bằng trình duyệt nào bạn có nghĩa là trình duyệt trên điện thoại của bạn? – Byron

+0

vâng, tôi đang thử nghiệm trên điện thoại trình duyệt của tôi – bukanamay

+0

@bukanamay Sự cố của bạn đã được giải quyết chưa? Và câu hỏi thứ hai: Tiêu đề này có cần thiết không? –

Trả lời

5

Đây không phải là vấn đề thư viện của bạn, trình duyệt thường bỏ qua lỗi 500 trong tiêu đề và hiển thị nội dung nhưng liều volley không làm điều đó và gọi onErrorResponse. Tôi nghĩ đây là vấn đề ứng dụng phía máy chủ nhưng bạn có thể nhận được phản hồi của mình trong onErrorResponse. để thuyết phục bản thân, bạn có thể thêm mozilla RESTClient vào và gửi yêu cầu bóng chuyền của bạn và xem phản hồi. trong tiêu đề, nó hiển thị cho bạn lỗi 500 lỗi máy chủ nội bộ nhưng bạn có thể thấy phản hồi trong phần nội dung

+0

Vâng, đúng vậy, ممنون –

+0

Tôi có thể thấy rằng nó hoạt động trong trình duyệt. Nhưng làm thế nào để xử lý trong Volley? –

+0

Đối mặt với cùng một vấn đề không nhận được giải pháp. cùng một dịch vụ hoạt động tốt trên ios – CrazyMind

1

Đây là giải pháp cho lỗi này. Trước hết bạn cần phải mở rộng các lớp Reponse và sửa đổi các @Override protected Response parseNetworkResponse(NetworkResponse response) { như thế này:

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(

và do lỗi người nghe:

@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

Tác phẩm này có phù hợp với bất kỳ ai không? – NovusMobile

Các vấn đề liên quan