2016-09-20 4 views
1

발리에서 JsonObjectRequest를 사용하여 POST 요청을 호출 할 때 특정 Wi-Fi에서 빈 본문을 전송 중입니다. 하지만 그것은 StringRequest POST 요청과 잘 작동합니다. 그것은 모든 모바일 네트워크에서 잘 작동합니다.발리를 사용하여 게시물 요청을 보내면서 비어있는 본문을 가져 오는 중

node.js 서버 및 expressjs/body-parser를 사용하고 있습니다. Postman을 사용하여 POST 요청을하면 모든 것이 정상적으로 작동합니다.

무엇이 오류입니까? 코드를보고 싶은 사람은 누구나 제공 할 수 있습니다. JsonobjectRequest

사용 StringRequest

private void LoginUser(final String email,final String pass) { 

     try { 

      /*Map<String, String> params = new HashMap<String, String>(); 
      params.put("username", email); 
      params.put("password", pass); 
      JSONObject jsonParams = new JSONObject(params);*/ 

      final StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, 
        new Response.Listener<String>() { 
         @Override 
         public void onResponse(String response) { 

          //Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show(); 

          try 
          { 
           Log.i("Inside try", "yes"); 
           JSONObject jsonResponse = new JSONObject(response).getJSONObject("user"); 
           Log.i("User name",jsonResponse.getString("name")); 
           Constants.setClinicName(jsonResponse.getString("name")); 

           String TokenDB=new JSONObject(response).getString("token"); 

           //Toast.makeText(getApplicationContext(),TokenDB,Toast.LENGTH_LONG).show(); 


           if(pd.isShowing()) 
           { 
            pd.dismiss(); 
           } 



           //Maintaining LogIn data till user clicks LogOut 
           SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
           SharedPreferences.Editor editor = app_preferences.edit(); 
           editor.putString("Token",TokenDB); 
           //editor.putString("username", username); 
           editor.commit(); 

           //Printing Token in Log in case of null token debugging 
           /*String status=manager.getPreferences(ClinicLogin.this,"token"); 
           Log.d("token", status); 
*/ 
           Intent intent=new Intent(ClinicLogin.this,MainActivity.class); 
           intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
           startActivity(intent); 

          }catch (JSONException ks) 
          { 
           ks.printStackTrace(); 
           Toast.makeText(getApplicationContext(), 
             "Oops! The Username & Password Do Not Match. Please try again!", 
             Toast.LENGTH_LONG).show(); 
          } 

         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 

          // Handle Error 
          if(pd.isShowing()) {pd.dismiss();} 
          if (error instanceof TimeoutError || error instanceof NoConnectionError) { 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof AuthFailureError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "User not authorized", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof ServerError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Server error", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof NetworkError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof ParseError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Error consuming request", Toast.LENGTH_SHORT).show(); 
          } 
          else error.printStackTrace(); 

         } 
        }){ 
       @Override 
       protected Map<String,String> getParams(){ 
        Map<String,String> params = new HashMap<String, String>(); 
        params.put("username", email); 
        params.put("password", pass); 
        return params; 
       } 

      }; 

      RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
      stringRequest.setRetryPolicy(new DefaultRetryPolicy(
        7000, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
      requestQueue.add(stringRequest); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

POST 호출을 사용하여

POST 요청 당신이 지금까지 한 일을

private void LoginUser(String email,String pass) { 

     try { 

      Map<String, String> params = new HashMap<String, String>(); 
      params.put("username", email); 
      params.put("password", pass); 
      JSONObject jsonParams = new JSONObject(params); 
      JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, REGISTER_URL, jsonParams, 
        new Response.Listener<JSONObject>() { 
         @Override 
         public void onResponse(JSONObject response) { 
          try { 
           // Parsing json object response 
           // response will be a json object 
           String TokenDB = response.getString("token"); 
           JSONObject user=response.getJSONObject("user"); 
           Constants.setClinicName(user.getString("name")); 

           //Constants.setTokenDB(TokenDB); 
           if(pd.isShowing()) 
           { 
            pd.dismiss(); 
           } 

           //Maintaining LogIn data till user clicks LogOut 
           SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
           SharedPreferences.Editor editor = app_preferences.edit(); 
           editor.putString("Token",TokenDB); 
           //editor.putString("username", username); 
           editor.commit(); 

           //Printing Token in Log in case of null token debugging 
           /*String status=manager.getPreferences(ClinicLogin.this,"token"); 
           Log.d("token", status); 
*/ 
           Intent intent=new Intent(ClinicLogin.this,MainActivity.class); 
           intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
           startActivity(intent); 
           } 
          catch (JSONException e) 
          { 
           e.printStackTrace(); 
           Toast.makeText(getApplicationContext(), 
             "Oops! The Username & Password Do Not Match. Please try again!", 
             Toast.LENGTH_LONG).show(); 
           } 

        } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 

          // Handle Error 
          if(pd.isShowing()) {pd.dismiss();} 
          if (error instanceof TimeoutError || error instanceof NoConnectionError) { 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof AuthFailureError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "User not authorized", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof ServerError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Server error", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof NetworkError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show(); 
          } else if (error instanceof ParseError) { 
           //TODO 
           error.printStackTrace(); 
           Toast.makeText(getApplicationContext(), "Error consuming request", Toast.LENGTH_SHORT).show(); 
          } 
          else error.printStackTrace(); 

         } 
        }) { 
       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        HashMap<String, String> headers = new HashMap<String, String>(); 
        headers.put("Content-Type", "application/json; charset=utf-8"); 
        return headers; 
       } 
      }; 

      RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
      postRequest.setRetryPolicy(new DefaultRetryPolicy(
        7000, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
      requestQueue.add(postRequest); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+1

붙여 넣기. '빈 몸을 보내고있는 특정 와이파이?' 포트가 WIFI에 의해 차단되고 있습니까? 보안 연결이 아닌가요? –

+0

코드를 추가했습니다. 네트워크 요청을하기 위해 발리 라이브러리를 사용 중입니다. 포트가 차단되었는지 어떻게 확인합니까? –

+0

서버에서 요청을 수신합니까? 콘텐츠 길이가 0보다 큰 경우 모든 요청에 ​​대해 서버 쪽에서 응답에 헤더를 추가하고 발리 응답을 확인하십시오. 요청에 http (80)를 사용하고 있습니까? –

답변

0
package com.example.mwakidoshi; 

import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.toolbox.HttpHeaderParser; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.UnsupportedEncodingException; 
import java.util.Map; 

/** 
* Created by Sly on 2017-11-17. 
*/ 

public class CustomRequest extends Request<JSONObject> { 
    private Response.Listener<JSONObject> listener; 
    private Map<String, String> params; 

    public CustomRequest(String url, Map<String, String> params, Response.Listener<JSONObject> responseListener, Response.ErrorListener errorListener) { 
     super(Method.GET, url, errorListener); 
     this.listener = responseListener; 
     this.params = params; 
    } 

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

    @Override 
    protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { 
     return params; 
    }; 

    @Override 
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 

      return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 

    @Override 
    protected void deliverResponse(JSONObject response) { 
     listener.onResponse(response); 
    } 
} 
+0

우리에게 고객 요청 클래스 사용 – mwakidoshi