2016-06-28 4 views
1

его фактически простой код, из-за отсутствия базового я все еще не могу справиться с этим.Как получить строку из Json Array

После того как я сделал сообщение JSON метод на собственном Апи, я получаю следующий ответ

[{"id":"2"}] 

То, что я пытаюсь добиться, что я хотел бы получить значение этого «ид», который это «2».

Я попытался следующий код в моем частном ничтожной методе

private void getUserID() { 


    StringRequest stringRequest = new StringRequest(Method.POST,Constants.GET_USER_ID, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG).show(); 

     try { 
     JSONObject jsonRootObject = new JSONObject(strJson); 

     //Get the instance of JSONArray that contains JSONObjects 
     JSONArray jsonArray = jsonRootObject.optJSONArray(""); 

     //Iterate the jsonArray and print the info of JSONObjects 
     for(int i=0; i < jsonArray.length(); i++){ 
      JSONObject jsonObject = jsonArray.getJSONObject(i); 

      int id = Integer.parseInt(jsonObject.optString("id").toString()); 
      String idUser = jsonObject.optString("id").toString(); 


     } 
     output.setText(idUser); 
     } catch (JSONException e) {e.printStackTrace();} 

        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show(); 
        } 
       }) 


     { 


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

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

       map.put(Constants.KEY_A, username); 
       map.put(Constants.KEY_B, password); 


       return map; 
      } 
     }; 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 

я получить его от here.

Это немного отходов, потому что у меня есть только один объект списка в моем массиве, и я думаю, что для цикла здесь не очень важно.

+0

'strJson' является JSONArray вместо JSONObject так сделать это, как: 'JSONArray jsonArray = новый JSONArray (strJson); int _id = jsonArray.getJSONObject (0) .getInt ("id"); 'не нужно использовать for-loop, если JSONArray содержит только один элемент –

+0

, если у вас есть только один элемент, тогда удалите jsonarray..и сделайте ответ вроде этого { id ":" 2 "} .. then get id –

ответ

3

заменить попробовать блок со следующими

try { 
      JSONArray jsonArray = new JSONArray(response); 

       JSONObject jsonObject = jsonArray.getJSONObject(0); 
       String idUser = jsonObject.getString("id"); 
       Log.e("id is: ", idUser); 

      } 
+0

несколько студий Android хотят, чтобы я попытался поймать всех, JSONArray jsonArray = null; try {jsonArray = new JSONArray (response);} catch (JSONException e) {e.printStackTrace();} JSONObject jsonObject = null; try {jsonObject = jsonArray.getJSONObject (0);} catch (JSONException e) {e.printStackTrace(); } String idUser = null; try {idUser = jsonObject.getString ("id"); } catch (JSONException e) {e.printStackTrace(); } Log.e ("id is:", idUser); –

+0

JSONArray jsonArray = новый JSONArray (ответ); -> AS предложить сделать попытку блокировки для него. и вскоре до String idUser –

+0

@GideonStevenTobing Вы можете добавить общий блок catch try, как я отредактировал. – Zartha

1

Попробуйте этот путь вы получите

private void makeJsonArrayRequest() { 



     showpDialog(); 

     JsonArrayRequest req = new JsonArrayRequest(delprourl, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d("ress", response.toString()); 

         // Parsing json 
         try { 

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

           JSONObject person = (JSONObject) response 
             .get(i); 

           System.out.println("person" + person); 

           //get your id here 

         String id = person.getString("id"); 
         Log.e("id: ", id); 
          } 




         } catch (JSONException e) { 
          e.printStackTrace(); 
          Toast.makeText(getApplicationContext(), 
            "Error: " + e.getMessage(), 
            Toast.LENGTH_LONG).show(); 
         } 
         hidepDialog(); 

         // notifying list adapter about data changes 
         // so that it renders the list view with updated data 
         //adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d("ErrorVolley", "Error: " + error.getMessage()); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_SHORT).show(); 
       hidepDialog(); 

      } 
     }); 


     MyApplication.getInstance().addToReqQueue(req, "jreq"); 
    } 


    private void showpDialog() { 
     if (!pDialog.isShowing()) 
      pDialog.show(); 
    } 

    private void hidepDialog() { 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 
    } 
+0

есть ошибка в .get (i); но в любом случае, я уже нашел ответ, спасибо за вашу помощь aditya –

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