2016-01-12 2 views
4

Я новичок в сетевой библиотеке google волейбола (а также на Android!), И я пытаюсь передать аргументы POST динамическим способом!Android volley, как динамически отправлять параметры сообщений

На данный момент я превосхожу метод getParams(): И возвращая параметры в жестком закодированном виде.

@Override 
protected Map<String, String> getParams() 
{ 
     Map<String, String> params = new HashMap<String, String>(); 
     params.put("login", "my_login"); 
     params.put("password", "my_password"); 
     return params; 
} 

Я хотел бы передать переменные вместо «жесткого закодированных» струн ...

Сначала я пытался поставить свою Карту Params как член моего класса, но члены класса не являются доступен в методе getParams().

Возможно, я мог бы использовать одноэлементный класс, чтобы я мог дать параметры, которые я хочу передать, и вернуть их с помощью своего экземпляра в методе getParams()? Но я не думаю, что это было бы правильно.

Ниже отверстие код запроса моего залпа в:

RequestQueue queue = VolleySingleton.getInstance().getRequestQueue(); 

String url = "https://theUrlToRequest"; 

StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
        new Response.Listener<String>() 
        { 
         @Override 
         public void onResponse(String response) { 
          JSONObject mainObject = null; 
          try { 
           Log.i("app", "Result = " + response); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 

         } 
        }, 
        new Response.ErrorListener() 
        { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          Log.i("app", "Fail on Login" + error.toString()); 
         } 
        } 
      ) { 
       @Override 
       protected Map<String, String> getParams() 
       { 
        Map<String, String> params = new HashMap<String, String>(); 
        params.put("login", "my_login"); 
        params.put("password", "my_password"); 

        return params; 
       } 
      }; 

queue.add(postRequest); 
+0

Почему бы вам просто не создать некоторые переменные и не сравнить их с переменными класса перед запросом и добавить переменные, которые вы создали для параметров? – shanks

+0

необходимо вернуть 'Map ' из 'getParams()', а не определять его там. Вы можете создать свою собственную коллекцию как переменную уровня класса и вернуть ее из 'getParams()'. – astuter

+0

@shank: Это хороший прозор. Я попробую это немедленно. Благодарю. – Doctor

ответ

1

В этом случае, вы можете создать класс расширяет StringRequest. Добавьте attr для сохранения параметров и верните его в getParams();

MyStringRequest extends StringRequest{ 

    private Map params = new HashMap(); 
    public MyStringRequest (Map params,int mehotd,String url,Listener listenr,ErrorListener errorListenr){ 
    super(mehotd,url,listenr,errorListenr) 

     this.params = params 

    } 
    @Override 
    protected Map<String, String> getParams(){ 

     return params; 

    } 

} 

RequestQueue queue = VolleySingleton.getInstance().getRequestQueue(); 

String url = "https://theUrlToRequest"; 
Map<String, String> params = new HashMap<String, String>(); 
params.put("login", "my_login"); 
params.put("password", "my_password"); 
MyStringRequest postRequest = new MyStringRequest (params ,Request.Method.POST, url, 
    new Response.Listener<String>(){ 
    }, 
    new Response.ErrorListener(){ 
    } 
); 
queue.add(postRequest); 
+0

Спасибо! Добавление другого класса «MyStringRequest» идеально ... !! – Doctor

Смежные вопросы