2016-12-19 3 views
-2

я буду получать ответ от сервера в таком виде:JSON объекта синтаксического анализ объект андроид

{"data":[{"id":22,"name":null,"uuid":"ewfnwofnonf"},{"id":44,"name":null,"uuid":"309r0ddpaso"}]} 

Что я хочу сделать, это проверить UUID устройства, что мое устройство является и получить «паспорт» Устройство. идентификатор UUID будет поступать из этого:

String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 

Это то, что я пробовал:

final String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 
VolleyGetHeaders.getInstance(ProfileSetting.this, finalToken); 
VolleyGetHeaders.getInstance().VolleyGETHeaders(domain, "device", new CustomListener<String>() { 
@Override 
public void getResult(String result) { 
    JSONObject obj = null; 
    try { 
      obj = new JSONObject(result); 
      if (obj.getString("uuid") == deviceId){ 

      String userID = obj.getString("id"); 

      } catch (JSONException e) { 
      e.printStackTrace(); 
      } 
      }}); 

Сервер успешно дал мне результат со значением для UUID, но у меня есть это следующее сообщение об ошибке:

org.json.JSONException: No value for uuid 

Также есть ли другой способ получить соответствующий «id» в моем ответе json для соответствия «uuid»?

+3

ваш первый старт тег с именем JSONObject _data_. Вы не можете напрямую разобрать _uuid_ – Piyush

+0

Вам необходимо принять любой из нижеприведенных ответов или сообщить, с какой ошибкой вы столкнулись. Принять ответ означает поддержку другого разработчика, чтобы быть частью сообщества в будущем. это тоже поможет вам. Пожалуйста, сделайте любую вещь, о которой я сказал выше. Это также даст вам некоторые значки. – Noorul

ответ

0

Вы разборе его в неправильном направлении, пожалуйста, попробуйте следующее,

final String deviceId = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 
    VolleyGetHeaders.getInstance(ProfileSetting.this, finalToken); 
    VolleyGetHeaders.getInstance().VolleyGETHeaders(domain, "device", new CustomListener<String>() { 
     @Override 
     public void getResult(String result) { 
      JSONObject obj = null; 
      try { 
       obj = new JSONObject(result); 
       JSONArray arrData = obj.getJsonArray("data"); 

       for (int i = 0; i < arrData.length; i++) { 
        JSONObject jobj=arrData.getJSONObject(i); 
        if (jobj.getString("uuid") == deviceId) { 
         String userID = obj.getString("id"); 

        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
+0

Благодарим вас за быстрый ответ, так как все ответы похожи, я буду многим вашим, как ответ, так как вы ответили быстрее всего. Спасибо! – JerryKo

0

Вы должны понимать, что data не только объект, который содержит uuid. Это фактически массив объектов, каждый из которых содержит uuid в качестве элемента данных. Вот почему вы не можете получить какое-либо значение для uuid при попытке получить к нему прямой доступ. Когда вы найдете объект из массива с соответствующим uuid, вы можете легко получить идентификатор. Попробуйте это:

JSONObject obj = null; 
String userID = null; 
try { 
     obj = new JSONObject(result); 
     JSONArray arrData = obj.getJsonArray("data"); 

     for (int i = 0; i < arrData.length; i++) { 
      JSONObject jobj=arrData.getJSONObject(i); 
      if (jobj.getString("uuid") == deviceId) { 
       userID = obj.getString("id"); 
       break; 

      } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Итак, когда цикл прерывается, вы будете иметь идентификатор объекта (как идентификатором пользователя), для которых UUID соответствует DeviceId

0

Try:

JSONObject obj = null; 
    try { 
      obj = new JSONObject(result); 
      JSONArray arrData = obj.getJsonArray("data"); 

      for (int i = 0; i < arrData.length; i++) { 
       JSONObject jobj=arrData.getJSONObject(i); 
       if (jobj.has("id")) { 
        String userID = obj.getString("id"); 
       } 
       if (jobj.has("uuid")) { 
        String userID = obj.getString("uuid"); 
       } 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
0

Вы должны сначала получить массив, а затем разобрать JSON массив, я Пазинг код для вас, надеюсь, что это поможет вам

private void parseJson(String s){ 
    try { 
     JSONObject jsonObject = new JSONObject(s); 
     JSONArray jsonArray = jsonObject.getJSONArray("data"); 
     if(jsonArray.length()>0){ 
      for(int i =0;i<jsonArray.length();i++){ 
       JSONObject object = jsonArray.getJSONObject(i); 
       Log.d("uuid:",object.getString("uuid")); 
       Log.d("id",object.getString("id")); 
      } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
0

  1. Пожалуйста, проверьте код ниже ..
  2. еще, если вы не получаете ответ, дайте мне URL, откуда ур выборки данных
  3. {} объект, [] Массив 4.please проверить код ниже в соответствии с вашим Быстродействие в результате veriable он должен работать

    JSONObject obj = null; 
        try { 
         obj = new JSONObject(result); 
         JSONArray jsonArray=obj.getJSONArray("data"); 
         for(int i=0;i<jsonArray.length();i++){ 
          JSONObject jo=jsonArray.getJSONObject(i); 
          String UUID=jo.getString("uuid"); 
          if (jobj.getString("UUID") == deviceId) { 
           String userID = jo.getString("id"); 
          } 
         } 
    
    } catch (JSONException e) { 
        e.printStackTrace(); 
    } 
    
Смежные вопросы