【问题标题】:how to get each string separately from HTTP response from service in ANDROID?如何从 ANDROID 服务的 HTTP 响应中分别获取每个字符串?
【发布时间】:2014-06-10 13:41:55
【问题描述】:

我在下面提到了响应代码。

switch(responseCode) {
            case 200:
            HttpEntity entity = response.getEntity();
                if(entity != null) {
                    String responseBody = EntityUtils.toString(entity);
                    Log.d("Responce", responseBody.toString());
                }
                break;
            }

此代码显示如下响应:

{"id":9,"name":"babu","role":5,"rights":"IsDelivery","result":"}

我想将每个值存储在单独的字符串中。比如Sting id = 3;Sting name = babu

请给我解决方案。

【问题讨论】:

标签: android json parsing http httpresponse


【解决方案1】:

有两种选择:

更简单: 创建一个以键为属性的类,如下所示:

class MyEntity {
    private int id;
    private String name;
    private int roles;
    private String rights;
    // ... other attributes;

    // setters and getters and constructors?
}

然后使用 Gson 库(此处为 https://code.google.com/p/google-gson/Android Studio 的 maven 存储库),并执行以下操作:

MyEntity myEntity = new Gson().fromJson(responseBody);

困难

使用JSONObject手动获取每个值:

 JSONObject mainObject = new JSONObject(responseBody);
 int id = mainObject.getInt("id");
 String name = mainObject.getString("name");
 // ....

【讨论】:

    【解决方案2】:

    您需要解析 JSON 响应并将其存储到一些变量中。例如假设你有一个类结构如下 -

    public class Person{
        public String id;
        public String name;
        public String role;
        public String rights;
        public String result;
    }
    

    然后您可以将响应值存储在此类中(以防您还没有字符串变量)

    方法如下-

    public Person parseResponse(String jsonString){
        Person person = new Person();
        JsonObject root = new JsonObject(jsonString);
        person.id = root.getString("id");
        person.name = root.getString("name");
        person.role = root.getString("role");
        person.rights = root.getString("rights");
        person.result = root.getString("result");
        return person;
    }
    

    您可以直接将这些值保存在成员变量中,而不是将其保存到 Person 对象中,但我更喜欢这种方式。 请记住,您需要在此处处理 JsonException,以防 json 字符串中出现任何错误,您的应用可能会崩溃。

    PS:要遵循封装,您需要将 Person 类的成员字段设为私有并为其创建 getter 和 setter。此处的代码仅供参考。

    【讨论】:

      【解决方案3】:

      尝试实现这个:

       String responseBody = EntityUtils.toString(entity);
      
      
      ArrayList<String> S = new ArrayList<String>();
      
           S = GenerateListCat(responseBody, tt);
      

      和 GenerateListCat;

      private <T> ArrayList<T> GenerateListCat(String result, Type y) {
      
          ArrayList<T> retData = new ArrayList<T>();
      
          GsonBuilder gsonb = new GsonBuilder();
          Gson gson = gsonb.create();
          try {
              JSONArray rslt = new JSONArray(result);
              // Parse Response into our object
              Type collectionType = y;
              String tt = rslt.toString();
              List<T> lst = new Gson().fromJson(tt, collectionType);
      
              for (T l : lst) {
                  retData.add(l);
              }
      
          } catch (Exception e) {
              Log.d("Error: ", e.getMessage());
          }
      
          return retData;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2011-03-01
        • 2016-07-13
        相关资源
        最近更新 更多