2016-04-20 3 views
0

Ich versuche Arraylist mit Zahlen als Parameter in Volley-Anfrage zu senden und dann analysieren Sie es und zeigen Sie die Werte (in der Zeichenfolge) in Toast. Aber ich bekomme keine Antwort. Ich würde gerne wissen, wo das Problem liegt.sende arraylist als Parameter in Volley-Anfrage

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); 
 
    } 
 

 

 

 

 
}

Antwort

1

Sie haben zuerst die JSONObject zu analysieren. Dann hol dir das JSONArray. wie auf diese Weise ->

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

zuerst die Antwort in JsonObject bekommen und dann die JsonArray retreive oder die Zeichenfolge Anfrage JsonArray Anfrage verwenden

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(); 
        } 
       } 

oder einfach JSONArray array = new JSONObject (response).getJSONArray("got_members");

+0

Ihr Code ist nicht richtig helfen konnte. 'JSONArray itemArray = neues JSONArray (" got_members ");' Diese Zeile sollte 'object.getJSONArray (" got_members ")' –

+0

sein Beide Antworten sind gleich, aber nachdem ich sie in meinem Code geändert habe, bekomme ich keinen Toast. Ich sollte den "String-Wert" in Toast bekommen –

+0

Wo Sie diesen Toast hinzufügen möchten. Sie möchten mehrere Toast oder einzelne Toast. ??.Danke Zainul Islam für dein suhhestion – Ameer

1

Sie hinzufügen müssen sich ändern Der folgende Code zusammen mit Ihrer übergeordneten Funktion 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; 
     } 

Darüber hinaus müssen Sie diese Zeile

JSONArray itemArray = new JSONArray("got_members"); 
diese

zu

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

Ich habe meine Art des Sendens Parameter durch Konvertieren der Arraylist in Zeichenfolge geändert. Aber jetzt bekomme ich nur Wert "20" und nicht "10". –

+1

'für (String k: Array) { params.put (" adding_members ", k); } ' Sie setzen den gleichen Schlüssel für mehrere Werte. Wenn der Schlüssel in HashMap gleich ist, werden vorherige Daten ersetzt. – nitinkumarp

+0

Es ist das gleiche wie mein Code. Ich bekomme immer noch den letzten Wert als Antwort. @ nitinkumarp –

0

versuchen stattdessen ganze Arraylist zu senden, ändern, wenn Sie Kontakt

@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; 

jetzt damit umgehen auf Server zu senden sind Seite

$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); 

jetzt nach Antwort

@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

Zuerst in Ihrem Objekt in Arraylist: JSONObjectmethod Namen wie getJSONObject, wie diese

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 Hier schaffen ist, wie ich es umgewandelt, in Meine Aktivität

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()); 

Hier konvertierte ich beide Typ JSONObject und JSONArray.

in

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

Dies kann die späte Antwort, aber als pro Antwort Beispiel dieses ein wenig

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(); 
    }