2015-06-01 4 views
1

Я использую Volley для взаимодействия с API. Мне нужно отправить сообщение с параметрами в службу, которая возвращает JSONArray.Android Volley - JsonArrayRequest с параметрами сообщения

Я переопределение метода protected Map<String, String> getParams(), но он не работает:

JsonArrayRequest eventoReq = new JsonArrayRequest(Configuracion.URL_API_PROXIMOS_EVENTOS, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 

         hidePDialog(); 

         // Parsea json 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject obj = response.getJSONObject(i); 

           Evento evento = new Evento(); 
           evento.setCod_evento(obj.getInt("cod_evento")); 
           evento.setTitulo(obj.getString("titulo")); 
           evento.setDescripcion(obj.getString("descripcion")); 
           evento.setDireccion(obj.getString("direccion")); 
           evento.setImagen(obj.getString("imagen")); 
           evento.setPuntuacion((float) obj.getDouble("puntuacion")); 

           // Añade el evento al listado 
           listaEventos.add(evento); 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 

         } 

         // Actualiza el adaptador 
         adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hidePDialog(); 

      } 
     }){ 
      @Override 
      protected Map<String, String> getParams() { 
       // Posting parameters to login url 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("tag", "eventos_proximos_usuario"); 
       params.put("cod_usuario", cod_usuario); 
       return params; 
      } 

      @Override 
      public int getMethod() { 
       return Method.POST; 
      } 
     }; 

     // Añade la peticion a la cola 
     AppController.getInstance().addToRequestQueue(eventoReq); 
+0

что вы имеете в виду, не работает ? –

+0

API не получает POST-параметры –

ответ

1

попробовать, как это, Я думаю, вам не нужно переопределить метод getMethod().

Передайте имя типа метода (то есть имя метода.POST) в JsonObjectRequest or JsonArrayRequest, как показано ниже.

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, 
       url, null, 
       new Response.Listener<JSONObject>() { 

        @Override 
        public void onResponse(JSONObject response) { 
         Log.d(TAG, response.toString()); 
         pDialog.hide(); 
        } 
       }, new Response.ErrorListener() { 

        @Override 
        public void onErrorResponse(VolleyError error) { 
         VolleyLog.d(TAG, "Error: " + error.getMessage()); 
         pDialog.hide(); 
        } 
       }) { 

      @Override 
      protected Map<String, String> getParams() { 
       // Posting parameters to login url 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("tag", "eventos_proximos_usuario"); 
       params.put("cod_usuario", cod_usuario); 
       return params; 
      } 

     }; 

// Adding request to request queue 
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); 
+0

Я пытаюсь сделать то же самое, поэтому я внедрил пользовательский запрос, но я все еще не могу заставить его работать ... Это моя попытка: http://stackoverflow.com/ questions/35971990/custom-jsonarray-volley-request-with-post-parameters Что касается вашего ответа, он вызывает onErrorResponse ... – iBobb

4

Try ... StringRequest вместо ..

Ссылка: https://android.googlesource.com/platform/frameworks/volley/+/master/src/main/java/com/android/volley/toolbox

JsonObjectRequest расширяет JSONRequest

а StringRequest расширяет Request

StringRequest eventoReq = new StringRequest(Request.Method.POST,Configuracion.URL_API_PROXIMOS_EVENTOS, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Log.d(TAG, response.toString()); 

        hidePDialog(); 
try{ 
JSONArray j= new JSONArray(response); 

        // Parsea json 
        for (int i = 0; i < j.length(); i++) { 
         try { 
          JSONObject obj = j.getJSONObject(i); 

          Evento evento = new Evento(); 
          evento.setCod_evento(obj.getInt("cod_evento")); 
          evento.setTitulo(obj.getString("titulo")); 
          evento.setDescripcion(obj.getString("descripcion")); 
          evento.setDireccion(obj.getString("direccion")); 
          evento.setImagen(obj.getString("imagen")); 
          evento.setPuntuacion((float) obj.getDouble("puntuacion")); 

          // Añade el evento al listado 
          listaEventos.add(evento); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
// Actualiza el adaptador 
        adapter.notifyDataSetChanged(); 
} catch (JSONException e) { 
         e.printStackTrace(); 
        } 


       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      hidePDialog(); 

     } 
    }){ 
     @Override 
     protected Map<String, String> getParams() { 
      // Posting parameters to login url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("tag", "eventos_proximos_usuario"); 
      params.put("cod_usuario", cod_usuario); 
      return params; 
     } 
    }; 

    // Añade la peticion a la cola 
    AppController.getInstance().addToRequestQueue(eventoReq); 

Я только начинающий надеюсь, что это поможет !!!

0

Я столкнулся с той же проблемой, когда начал использовать Volley в своем проекте Android. Я решил проблему, используя StringRequest вместо JsonArrayRequest. , например, если вы хотите, чтобы показать ListView с некоторыми данными сервера ... Просто используйте простой StringRequest вместо JSONArrayRequest и реализует onResponse METHODE так:

public void onResponse(String response){ 

      try{ 

      JSONArray jsonArray=new JSONArray(response); 

      for(int i=0;i<jsonArray.length();i++) { 

       try { 

         JSONObject jsonObject = jsonArray.getJSONObject(i); 

         // do something 

       } catch (JSONException e) { 

        e.printStackTrace(); 

       }  



      } 

     }catch (JSONException e2){ 
       e2.printStackTrace(); 


      } 

     } 

    } 
0
StringRequest request = new StringRequest(Request.Method.POST, YourUrl, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      if (!response.equals(null)) { 
       Log.e("Your Array Response", response);      
      } else { 
       Log.e("Your Array Response", "Data Null"); 
      } 
     } 

    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("error is ", "" + error); 
     } 
    }) {  

    //This is for Headers If You Needed 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/json; charset=UTF-8"); 
      params.put("token", ACCESS_TOKEN); 
      return params; 
     } 

    //Pass Your Parameters here 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("User", UserName); 
      params.put("Pass", PassWord); 
      return params; 
     } 
    }; 
    RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); 
    queue.add(request); 
Смежные вопросы