2016-04-20 4 views
0

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

json response: 
 

 
{ 
 
    "got_members": [ 
 
    "1", 
 
    "2" 
 
    ] 
 
}
public class SearchFragment extends Fragment{ 
 

 
    Button checkme; 
 
    private static final String ADDMEM = "http://www.example.com/api/event/addmembers/", KEY_ADDMEM = "adding_members"; 
 

 
    @Nullable 
 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 
     return inflater.inflate(R.layout.searchfragment, container, false); 
 
    } 
 

 
    @Override 
 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
 
     super.onViewCreated(view, savedInstanceState); 
 

 

 
     checkme = (Button)view.findViewById(R.id.checkme); 
 
     checkme.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 

 
       checkarraylist(); 
 

 
      } 
 
     }); 
 
    } 
 

 
    private void checkarraylist(){ 
 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, ADDMEM, 
 
       new Response.Listener<String>() { 
 
        @Override 
 
        public void onResponse(String response) { 
 

 
         if(response != null){ 
 
          try { 
 
           JSONObject object = new JSONObject(response); 
 
          } catch (JSONException e) { 
 
           e.printStackTrace(); 
 
          } 
 

 

 
         }else { 
 

 
          Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show(); 
 
          try { 
 

 
           JSONArray itemArray = new JSONObject(response).getJSONArray("got_members"); 
 
           for (int i = 0; i < itemArray.length(); i++) { 
 
            String value = itemArray.getString(i); 
 
            Toast.makeText(getActivity(), "Result:" + value + "\n", Toast.LENGTH_SHORT).show(); 
 
           } 
 

 

 
          } catch (JSONException e) { 
 
           // JSON error 
 
           e.printStackTrace(); 
 
           Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
 
          } 
 

 
         } 
 
        } 
 
       }, new Response.ErrorListener() { 
 
      @Override 
 
      public void onErrorResponse(VolleyError error) { 
 
       Toast.makeText(getActivity(), error.toString(), Toast.LENGTH_LONG).show(); 
 
      } 
 
     }) { 
 
      @Override 
 
      protected Map<String, String> getParams() { 
 
       ArrayList<String> strings = new ArrayList<String>(); 
 
       strings.add("10"); 
 
       strings.add("20"); 
 
       strings.add("30"); 
 
       Map<String, String> params = new HashMap<String, String>(); 
 
       int i=0; 
 
       for(String object: strings){ 
 
        params.put("adding_members["+(i++)+"]", object); 
 
        System.out.println(object); 
 
       } 
 

 
      /* String array[]=strings.toArray(new String[strings.size()]); 
 

 
       for(String k: array) 
 
       { 
 

 
        params.put("adding_members", k); 
 
        System.out.println(k); 
 
       } */ 
 

 

 

 
       return params; 
 
      } 
 

 
      @Override 
 
      public Map<String, String> getHeaders() throws AuthFailureError { 
 
       Map<String, String> params = new HashMap<String, String>(); 
 
       params.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 
 
       return params; 
 
      } 
 

 
     }; 
 

 
     RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
 
     requestQueue.add(stringRequest); 
 
    } 
 

 

 

 

 
}

ответ

1

Вы должны разобрать JSONObject первым. Затем запустите JSONArray. как этот путь ->

try { 
    JSONArray array = new JSONObject(response).getJSONArray("got_members"); 
    for (int i = 0; i < itemArray.length(); i++) { 
     String value=itemArray.getString(i); 
     //Log.e("json", i+"="+value); 
     Toast.makeText(getActivity(), "Result:" + value+"\n", Toast.LENGTH_SHORT).show(); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
0

Сначала получите ответ в JSONObject, а затем извлечь в JsonArray или изменить запрос строку на запрос JsonArray

try { 
     JsonObject object=new JsonObject(response) 

          JSONArray itemArray = new JSONArray("got_members"); 
          for (int i = 0; i < itemArray.length(); i++) { 
           String value=itemArray.getString(i); 
           //Log.e("json", i+"="+value); 
           Toast.makeText(getActivity(), "Result:" + value+"\n", Toast.LENGTH_SHORT).show(); 
          } 



        } catch (JSONException e) { 
         // JSON error 
         e.printStackTrace(); 
         Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
        } 
       } 

или просто использовать JSONArray array = new JSONObject (response).getJSONArray("got_members");

+0

Ваш код не является правильным. 'JSONArray itemArray = new JSONArray (« got_members »);' Эта строка должна быть 'object.getJSONArray (« got_members »)' –

+0

Оба ответа одинаковы, но после изменения в моем коде я не получаю Toast. Я должен получить «String value» в тосте –

+0

Куда вы хотите добавить этот тост. Вы хотите много тостов или одного тоста. ??.Спасибо Zainul Islam за ур. – Ameer

1

Вы должны добавить следующий код вместе с вашей основной функцией getParams()

@Override 
     protected Map<String, String> getParams() { 
//Parameters added here 
} 

@Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 
      return params; 
     } 

Кроме того, необходимо изменить эту линию

JSONArray itemArray = new JSONArray("got_members"); 

в

JSONArray itemArray = new JSONObject(response).getJSONArray("got_members"); 
+0

Я изменил способ отправки параметра, преобразовывая arraylist в строку. Но теперь я получаю только значение «20», а не «10». –

+1

'for (String k: array) { params.put (" add_members ", k); } ' вы кладете тот же ключ для нескольких значений. Если в HashMap ключ такой же, он заменит предыдущие данные. – nitinkumarp

+0

Это то же самое, что и мой код. Я все еще получаю последнее значение только в ответ. @nitinkumarp –

0

попробовать это вместо того, чтобы посылать всю ArrayList, если вы отправляете контакт

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

      ArrayList<String> numbers = new ArrayList<String>(); 
      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 

      while (phones.moveToNext()) 
      { 
       String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
       String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       numbers.add("\n"+name+"\n"+phoneNumber+"\n"); 

      } 
      phones.close(); 

      Map<String, String> params = new HashMap<String, String>(); 

      int i=0; 
      for(String object: numbers){ 
       params.put("a"+(i++), object); 
      if(i==10) 
       break; 
      } 
      return params; 

Теперь справиться с этим на сервере Сторона

$response=array();$response["res"]=array(); foreach($_POST as $k => $v) { 
if(strpos($k, 'a') === 0) { 
    $res=array(); 
    $ab=$k = $v; 
    $res["name"]=$ab;array_push($response["res"],$res);}}echo json_encode($response); 

теперь после ответа

@Override 
     public void onResponse(String response) { 

      try { 

       JSONObject stdent = new JSONObject(response); 
       JSONArray students = stdent.getJSONArray("res"); 
       for (int i = 0; i < students.length(); i++) { 
        String ab=students.getString(i); 
        Toast.makeText(getApplicationContext(), ab, Toast.LENGTH_LONG).show(); 

       } 
1

Первый в своем объекте в ArrayList: создать имя JSONObjectmethod как getJSONObject, как этот

public class EstimateObject { 
String id, name, qty, price, total; 
public EstimateObject(String id, String name, String qty, String price, String total, int position) 
{ 
    this.id = id; 
    this.name = name; 
    this.qty = qty; 
    this.price = price; 
    this.total =total; 
    this.position = position; 
} 
public JSONObject getJSONObject() { 
    JSONObject obj = new JSONObject(); 
    try { 
     obj.put("Id", id); 
     obj.put("Name", name); 
     obj.put("Qty",qty); 
     obj.put("Price", price); 
     obj.put("Total", total); 
    } 
    catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return obj; 
} 

Aftrer Вот как я преобразовал его в моя деятельность

JSONObject JSONestimate = new JSONObject(); 
    JSONArray myarray = new JSONArray(); 

    for (int i = 0; i < items.size(); i++) { 

     try { 
      JSONestimate.put("data:" + String.valueOf(i + 1), items.get(i).getJSONObject()); 
      myarray.put(items.get(i).getJSONObject()); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
    Log.d("JSONobject: ", JSONestimate.toString()); 
    Log.d("JSONArray : ", myarray.toString()); 

Здесь я преобразовал оба типа JSONObject и JSONArray.

После того как в

map.put("jsonarray",myarray.toString()); 
1

Это может быть поздно ответ, но как в примере ответа это может немного помочь

try { 
     JSONObject object = new JSONObject(); 
     JSONArray jsonArray = new JSONArray(); 
     for (int i = 0; i < 2; i++) { 
      String someString = String.valueOf(i); 
      jsonArray.put(someString); 
     } 
     object.put("got_members", jsonArray); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
Смежные вопросы