2015-10-08 2 views
3

Я новичок в разборе Json. Я пытаюсь прочитать данные json, используя JsonArrayRequest, но я немного запутался в отправке параметров и использовал метод POST. В случае JsonObjectRequest я могу отправить тип метода, url, params, но в JsonArrayRequest как отправить параметры как имя пользователя и пароль и использовать POST method.please помогите мне. Вот код, который я написал.Как отправить параметры запроса при использовании JsonArrayRequest в Volley

final JsonArrayRequest jsonObjReq = new JsonArrayRequest(MySingleton.getInstance().getDOWNLOAD_SERVICES_URL(), new Response.Listener<JSONArray>() { 
    @Override 
    public void onResponse(JSONArray response) { 
     try { 
      if(response==null) { 
       pDialog.hide(); 
      } 
      for (int i = 0; i < response.length(); i++) { 
       jresponse = response.getJSONObject(i); 
      } 
      //String service_response = response.getString("SvcTypeDsc"); 
      Toast.makeText(getActivity().getApplicationContext(), "services" + jresponse, Toast.LENGTH_SHORT).show(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
      Log.d("soservices", "sos" + e.getMessage()); 
     } 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     VolleyLog.d("Login request", "Error: " + error.getMessage()); 
     Log.d("Volley Error:", "Volley Error:" + error.getMessage()); 
     Toast.makeText(getActivity(), "Unable to connect to server, try again later", Toast.LENGTH_LONG).show(); 
     pDialog.hide(); 
    } 
}) { 
    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     Map<String, String> params = new HashMap<String, String>(); 
     params.put("uniquesessiontokenid","39676161-b890-4d10-8c96-7aa3d9724119"); 
     params.put("loginname", userDet.getSAID()); 
     params.put("password", "23295"); 
     return super.getParams(); 
    } 

    @Override 
    public int getMethod() { 
     try { 
      getParams(); 
     } catch (AuthFailureError authFailureError) { 
      authFailureError.printStackTrace(); 
     } 
      return super.getMethod(); 
     } 
    }; 

    AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj); 

} 

мои данные JSON, как:

{ 
    "username":"rushi", 
    "firstname": "abc", 
}, 
{ 
    "username": "xyz", 
    "firstname": "vxa", 
}, 

В PARAMS не отправляются. Пожалуйста, помогите мне решить это. Спасибо заранее.

+0

Этот вопрос уже дан здесь: http://stackoverflow.com/questions/18048806/volley-sending-a-post-request-using-jsonarrayrequest –

+0

Ваша проблема решена или нет? – BNK

+0

Да, я решил проблему, используя JSONRequest, как показано ниже: – user1932583

ответ

3

Это решило мою проблему пройти Params, когда используется JsonArrayRequest и POST метод.

Volley.newRequestQueue(getActivity()) 
    .add(new JsonRequest<JSONArray>(Request.Method.POST, 
    MySingleton.getInstance().getDOWNLOAD_SERVICES_URL(), 
    jsonobj.toString(), 
    new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray jsonArray) { 
       Log.d("response", "res-rec is" + jsonArray); 
       if (jsonArray == null) { 
        pDialog.dismiss(); 
        Snackbar.make(myview, "No services found", Snackbar.LENGTH_LONG).show(); 

       } else { 


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

          pDialog.dismiss(); 
          JSONObject jsonObject = jsonArray.getJSONObject(i); 
          String desc = jsonObject.getString("SvcTypeDsc"); 
          String image_url = jsonObject.getString("ThumbnailUrl"); 
          // al_ImageUrls.add(image_url); 

          al_list_of_services.add(desc); 
          ad_servicesadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, al_list_of_services); 

          lv_webservicesList.setAdapter(ad_servicesadapter); 

          Log.d("imageurls", "imagesurl " + image_url); 
          Log.d("services-list", "list is " + desc + " " + i); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       VolleyLog.d("Login request", "Error: " + volleyError.getMessage()); 
       Log.d("Volley Error:", "Volley Error:" + volleyError.getMessage()); 
       Toast.makeText(getActivity(), "Unable to connect to server, try again later", Toast.LENGTH_LONG).show(); 
       pDialog.dismiss(); 
      } 
     }) 

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


       Map<String, String> params = new HashMap<String, String>(); 
       // params.put("uniquesessiontokenid", "39676161-b890-4d10-8c96-7aa3d9724119"); 
       params.put("uniquesessiontokenid", userDet.getSessionToken()); 
       params.put("said", userDet.getSAID()); 
       params.put("SOId", "23295"); 

       return super.getParams(); 
      } 

      @Override 
      protected Response<JSONArray> parseNetworkResponse(NetworkResponse networkResponse) { 


       try { 
        String jsonString = new String(networkResponse.data, 
          HttpHeaderParser 
            .parseCharset(networkResponse.headers)); 
        return Response.success(new JSONArray(jsonString), 
          HttpHeaderParser 
            .parseCacheHeaders(networkResponse)); 
       } catch (UnsupportedEncodingException e) { 
        return Response.error(new ParseError(e)); 
       } catch (JSONException je) { 
        return Response.error(new ParseError(je)); 
       } 

       // return null; 
      } 
     } 
); 
+0

Спасибо, что это помогло мне решить мою проблему. – user1932583

+0

Что такое 'jsonobj'? – sadegh

+0

jsonobj - это jsonobject, который имеет параметры запроса и преобразован в формат sstring. –

-1

Здесь вы идете ..

final HashMap<String, String> params = new HashMap<String, String>(); 
    params.put("email", userName); 
    params.put("password", password); 

    final JSONObject jsonObject = new JSONObject(params); 

    JsonArrayRequest req = new JsonArrayRequest(Request.Method.POST, url, jsonObject, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        try { 
//process response 
} 
catch(JSONEXception e){} 

А на PHP стороне вы можете получить этот Params как этого

$json=file_get_contents('php://input'); 

$data = json_decode($json); 
$email=$data->{'email'}; 
$pass=$data->{'password'}; 
+0

Bro его попросили запросить JSONArray, кажется, вы ответили на запрос JSONObject. –

+0

Сделали изменения в ответе :) –

+0

Привет, я хочу написать JsonarrayRequest с помощью post и jsonobject как params для JsonArrayrequest, он показывает ошибку, поскольку он позволяет использовать только URL-адрес, ответчик-слушатель, прослушиватель ошибок. – user1932583

2
import java.io.UnsupportedEncodingException; 
import java.util.Map;  
import org.json.JSONException; 
import org.json.JSONObject;  
import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.Response.ErrorListener; 
import com.android.volley.Response.Listener; 
import com.android.volley.toolbox.HttpHeaderParser; 

public class CustomRequest extends Request<JSONObject> { 

    private Listener<JSONObject> listener; 
    private Map<String, String> params; 

    public CustomRequest(String url, Map<String, String> params, 
      Listener<JSONObject> reponseListener, ErrorListener errorListener) { 
     super(Method.GET, url, errorListener); 
     this.listener = reponseListener; 
     this.params = params; 
    } 

    public CustomRequest(int method, String url, Map<String, String> params, 
      Listener<JSONObject> reponseListener, ErrorListener errorListener) { 
     super(method, url, errorListener); 
     this.listener = reponseListener; 
     this.params = params; 
    } 

    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) { 
     // TODO Auto-generated method stub 
     listener.onResponse(response); 
    } 
} 

В деятельности/фрагмент использует этот

RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
CustomRequest jsObjRequest = new CustomRequest(Method.POST, url, params, this.createRequestSuccessListener(), this.createRequestErrorListener()); 

requestQueue.add(jsObjRequest); 

Ответ получить форму здесь. https://stackoverflow.com/a/19945676/1641556

См. Также эти статьи.

  1. https://developer.android.com/training/volley/index.html
  2. http://www.androidhive.info/2014/09/android-json-parsing-using-volley/
+0

, пожалуйста, прочитайте мой вопрос снова. Мне нужно передать параметры и метод. это http://www.androidhive.info/2014/09/android-json-parsing-using-volley/ – user1932583

+0

выше url doesnot work me – user1932583

+1

Большое вам спасибо, я пытался расширить JsonArrayRequest вместо запроса (ну, это что я изменил ваш ответ, чтобы вызвать необходимость в массиве). Удобное решение! – iBobb

0

вот пример, чтобы отправить запрос на сервер с помощью Volly

Вы можете добавить параметры в HashMap, а затем передать, что в просьбе вас создают;

EDITED:

HashMap<String, String> mRequestParams = new HashMap<String, String>(); 
    mRequestParams.put("username","abcd"); 
    mRequestParams.put("password", "123456"); 

    public void vollyStringRequestForPost() { 


    JsonArrayRequest req = new JsonArrayRequest(Request.Method.POST, strURL, new JSONObject(mRequestParams), 
       new Response.Listener<JSONArray>() { 

        @Override 
        public void onResponse(JSONArray response) { 

          try { 

           //Here you will receive your response 

          } catch (JSONException e) { 

           e.printStackTrace(); 

          } 
         } 
        }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 

        //Do what you want to do on error 
       } 
      }); 



     mRequestQueue.add(req); 
    } 


} 
+0

Я попросил JSONArrayRequest – user1932583

+0

вы можете изменить JsonObjectRequest на JSONArrayRequest ... до вас ... после получения ответа вы можете преобразовать его в строку и проанализировать его как простой JSON в формате простой строки ... главное, что вы просите о том, как вы можете отправлять параметры в свой почтовый запрос ... и я уверен, что в приведенном выше коде .. – pks

+0

, когда я изменяю JSONObjectRequest на JSONArrayRequest, я не могу дать POST, Params. – user1932583

1

Если вы используете 'com.android.volley:volley:1.0.0' вы должны переопределить getParams() метод как это:

public synchronized void addJsonArrayRequest(int method, String url, final JSONObject jsonRequest, Response.Listener<JSONArray> responseListener, Response.ErrorListener errorListener) { 
    JsonArrayRequest request = new JsonArrayRequest(method, url, null, responseListener, errorListener) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<>(); 
      try { 
       params.put("key1", jsonRequest.getString("key1")); 
       params.put("key2", Integer.toString(jsonRequest.getInt("key2"))); 
       params.put("key3", Boolean.toString(jsonRequest.getBoolean("key3"))); 
       params.put("key4", jsonRequest.getJSONArray("key4").toString()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return params; 
     } 
    }; 
    addToRequestQueue(request); 
} 

Если вы используете «com.mcxiaoke.volley: библиотека: 1.0. 19 ' можно просто положить JSONObject:

public synchronized void addJsonArrayRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONArray> responseListener, Response.ErrorListener errorListener) { 
    JsonArrayRequest request = new JsonArrayRequest(method, url, jsonRequest, responseListener, errorListener); 
    addToRequestQueue(request); 
} 
+0

Первый метод работает для веб-API (REST), который ожидает ввода в виде запросов JSONObject для POST-запросов? – Shashanth

+1

@Shashanth yes: 'addJsonArrayRequest (Method.POST, URL, inputJSON, responseListener, errorListener);' –

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