2016-09-20 6 views
1

Когда я делаю запрос запроса POST с помощью JsonObjectRequest в залпе, а затем на определенном Wi-Fi, он отправляет пустой кузов. Но он отлично работает с запросом POST StringRequest. Он отлично работает во всех мобильных сетях.получение пустого тела при отправке запроса на отправку с помощью volley Android

Я использую node.js server и expressjs/body-parser. Когда я делаю запрос POST с помощью Postman, все работает нормально.

Какая ошибка? Если кто-то хочет увидеть код, который я могу предоставить.

запрос POST с использованием 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 вызова с использованием JsonobjectRequest

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

Paste, что вы сделали до сих пор. 'some wifi отправляет пустое тело?' Ваш порт блокируется WIFI ?. Разве это не защищенная связь? –

+0

Я добавил код. Я использую библиотеку volley для создания сетевого запроса. Как я могу проверить порт заблокирован или нет? –

+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

используйте для нас класс запроса custome – mwakidoshi