2017-02-14 1 views
0

Je crée une application Android qui s'intègre à l'API Facebook et utilise une API REST, donc j'utilise Volley. Cependant, j'essaie d'émettre une requête GET pour un tableau JSON et je dois inclure le jeton d'autorisation Facebook pour accéder au serveur. La plupart des questions que je l'ai vu à ce sujet sont relativement vieux, et il semble que Volley prend désormais en charge de passer params de demande (à partir de la page GitHub volley):GET Demander des paramètres en utilisant Volley

/** 
* Creates a new request. 
* @param method the HTTP method to use 
* @param url URL to fetch the JSON from 
* @param jsonRequest A {@link JSONArray} to post with the request. Null is allowed and 
* indicates no parameters will be posted along with request. 
* @param listener Listener to receive the JSON response 
* @param errorListener Error listener, or null to ignore errors. 
*/ 
public JsonArrayRequest(int method, String url, JSONArray jsonRequest, 
         Listener<JSONArray> listener, ErrorListener errorListener) { 
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, 
      errorListener); 
} 

Mais quand je fais et de délivrer une JsonArrayRequest , J'obtiens un com.android.volley.AuthFailureError. Voici mon code, est-ce que quelqu'un sait ce que je fais mal?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    System.out.println("Yo im here"); 
    JSONObject requestParams = new JSONObject(); 
    JSONArray paramArray = new JSONArray(); 
    try { 
     requestParams.put("Authorization", "JWT (Facebook auth token)"); 
     paramArray.put(requestParams); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    System.out.println(paramArray.toString()); 

    RequestQueue queue = Volley.newRequestQueue(this); 

    JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, 
      GET_MAP_MICS, 
      paramArray, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray micArray) { 
        try { 
         for (int i = 0; i < micArray.length(); i++) { 
          JSONObject jsonobject = micArray.getJSONObject(i); 
          int micId = jsonobject.getInt("micId"); 
          String status = jsonobject.getString("status"); 
          System.out.println("Good so far!"); 
          double venLat = jsonobject.getDouble("venueLat"); 
          double venLong = jsonobject.getDouble("venueLat"); 
          System.out.println("got here, check it: " + venLat); 
         } 
        }catch (JSONException e) { 
          e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError e) { 
      System.out.println(e); 
     } 
    }); 

Répondre

0

méthode GET ne prennent pas les paramètres que POST ne

dans votre cas vos en-têtes de passage comme corps pour la méthode GET vous des en-têtes de passe

JsonObjectRequest request = new JsonObjectRequest(url, (JSONObject) null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject jsonObject) { 

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

      } 
     }) { 
      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> map = new HashMap<>(); 
       /*Add your headers here*/ 
       return super.getHeaders(); 
      } 
     }; 

possibilité finale il y a deux même classe nom sera là dans votre projet par exemple toute lib votre utilisation également en utilisant la volée lib cela se passe une fois pour moi

+0

Merci pour cela, j'avais confondu la distinction entre les paramètres et les en-têtes. Cependant, la façon dont vous avez posté n'est pas une manière valide de remplacer la méthode getHeaders, quelle serait la bonne façon de surcharger cette méthode? –

+0

il n'y a qu'une façon de passer les en-têtes est comme ça pour n'importe quel 'req' dans' volley' en utilisant 'Map ' s'il y a une autre méthode faites moi savoir si vous trouvez –

+0

Non je veux juste dire que j'obtiens une syntaxe erreur lors de la tentative d'ajout dans votre Override de getHeaders –