2016-09-25 1 views
0

J'essaie de faire un appel POST sur un point de terminaison pour un projet de compagnie de mon application android.Android Volley POST ServerError

J'utilise la bibliothèque volley et je frappais cette erreur: com.android.volley.ServerError avec message comme NULL. (Je suis un moment difficile essayer de comprendre ce que je fais mal)

Je me suis assuré que j'ai donné l'option de connexion internet dans mon manifeste: <uses-permission android:name="android.permission.INTERNET" />

Aussi mon point final est accessible par boucle pour le test:

curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 122eedf5-8ca5-c1a6-06d9-5cc1986d2b23" -d '{ 
    "departure_time" : "2016-07-21 07:00:00", 
    "arrival_time" : "2016-07-21 08:30:00", 
    "location_flow": ["Milpitas+ca", "SanCarlos+Ca"], 
    "buffer_time": [0, 30, 0], 
    "mode": "driving" 
}' "https://sudtrafficalarm.herokuapp.com/v1/wakecheck" 

sortie:

{ 
    "estimated_arrival_time": "2016-07-21 08:05:01", 
    "journey_duration": 2101, 
    "wake_status": false 
} 

Ceci est mon activité principale:

package com.sudhishkr.sudtrafficalarmandroid; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import com.android.volley.AuthFailureError; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

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

import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final RequestQueue queue = Volley.newRequestQueue(this); 
     Button button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //Toast.makeText(MainActivity.this, SystemTime.date2String(SystemTime.getCurrentTime()), Toast.LENGTH_SHORT).show(); 
       final String REGISTER_URL = "https://sudtrafficalarm.herokuapp.com/v1/wakecheck"; 
       JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, REGISTER_URL, getJsonData(), 
         new Response.Listener<JSONObject>() { 
          @Override 
          public void onResponse(JSONObject response) { 
           Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show(); 
          } 
         }, 
         new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 
           Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show(); 
          } 
         } 
       ); 
       queue.add(jsonRequest); 


      } 
     }); 
    } 

    public JSONObject getJsonData() { 
     JSONObject params = new JSONObject(); 
     try { 
      params.put("departure_time", "2016-07-21 07:00:00"); 
      params.put("arrival_time", "2016-07-21 08:30:00"); 
      params.put("mode", "driving"); 
      JSONArray address = new JSONArray(); 
      address.put("Milpitas+ca"); 
      address.put("SanCarlos+Ca"); 
      params.put("location_flow", address); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return params; 
    } 


} 

Déboguer le code - prend moi ici. Et je n'ai aucun message ou information sur la raison pour laquelle cela se produit.

enter image description here

+0

je pense que ce devrait être un problème de connexion s'il vous plaît vérifier votre URL fonctionne –

+0

boucle est travaillant @JithinKuriakose, c'est pourquoi j'ai donné mon point final. – sudhishkr

Répondre

1

Vous n'avez pas ajouté de 'buffer_time' dans votre code Android. Voir la demande curl, les données POST est différent de ce que vous soumettez à partir du code Android. Votre getJsonData() devrait ressembler à ceci (j'ai créé un projet de démonstration et fait des changements, je peux voir la réponse attendue):

public JSONObject getJsonData() { 
    JSONObject params = new JSONObject(); 
    try { 
     params.put("departure_time", "2016-07-21 07:00:00"); 
     params.put("arrival_time", "2016-07-21 08:30:00"); 
     params.put("mode", "driving"); 
     JSONArray address = new JSONArray(); 
     address.put("Milpitas+ca"); 
     address.put("SanCarlos+Ca"); 
     params.put("location_flow", address); 

     JSONArray buffer_time = new JSONArray(); 
     buffer_time.put(0); 
     buffer_time.put(30); 
     buffer_time.put(0); 
     params.put("buffer_time", buffer_time); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return params; 
} 
1

je suppose que ça se passe parce que vous essayez d'imprimer des toasts en fil d'arrière-plan qui supposé est appelé dans cette discussion principale. La raison possible pourrait être que les méthodes de rappel de l'API seront appelées dans le thread d'arrière-plan, car les opérations réseau se produisent toujours dans le thread d'arrière-plan.

Utilisez ce paramètre code mis à jour

button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //Toast.makeText(MainActivity.this, SystemTime.date2String(SystemTime.getCurrentTime()), Toast.LENGTH_SHORT).show(); 
      final String REGISTER_URL = "https://sudtrafficalarm.herokuapp.com/v1/wakecheck"; 
      JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, REGISTER_URL, getJsonData(), 
        new Response.Listener<JSONObject>() { 
         @Override 
         public void onResponse(JSONObject response) { 
          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show();   
           } 
          }); 

         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show();   
           } 
          }); 

         } 
        } 
      ); 
      queue.add(jsonRequest); 


     } 
    }); 
+0

en fait c'était un problème avec ma charge utile qui manquait un paramètre. – sudhishkr