【问题标题】:Getting a value from json request in android从android中的json请求中获取值
【发布时间】:2014-07-15 12:13:56
【问题描述】:

我需要获取 JSON 请求并将其设置在下面的设计中。

Groupname1

Staff1

Staff2

Groupname2

Staff3

这是我的 json 响应:

 {"Response":   [{"complete_count":"11","assigned_count":15,"checked_count":"2","staff_firstname":"krish","staff_emp_code":"mmch23 y","staff_id":"29","group_name":"Technical- 1ty"},{"complete_count":"0","assigned_count":3,"checked_count":"0","staff_firstname":"Ravi","staff_emp_code":"MMCH050","staff_id":"38","group_name":"Technical- 1ty"},{"complete_count":"3","assigned_count":4,"checked_count":"0","staff_firstname":"mercy","staff_emp_code":"mmcho56","staff_id":"78","group_name":"Technical- 1ty"},{"complete_count":"0","assigned_count":1,"checked_count":"0","staff_firstname":"Sam ji","staff_emp_code":"Et","staff_id":"71","group_name":"test group"}],"success":1} 

这是我的代码:

class My_WIReports extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_LOADING);
    }
    protected String doInBackground(String... args) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        json = jParser.makeHttpRequest(url_weekly_list_individual, "POST", params);
        Log.d("My Weekly Individual Reports: ", json.toString());
        try {
             success = json.getInt(TAG_SUCCESS);
            if (success == 1) {

                JSONObject jsonObj = new JSONObject(json.toString());
                 groups = jsonObj.getJSONArray(TAG_STAFFS);
                for (int i = 0; i < groups.length(); i++) {
                    JSONObject c = groups.getJSONObject(i);
                    String groupname = c.getString(TAG_GROUPNAME);
                    String Staff_Complete_count = c.getString(TAG_STAFF_COMPC);
                    String Assig_Count = c.getString(TAG_STAFF_ASSC);
                    String Staff_F_name = c.getString(TAG_STAFF_NAME);
                    String Staff_Emp_code = c.getString(TAG_STAFF_EMPC);
                    String Staff_id = c.getString(TAG_STAFF_ID);
                    String  track_no = String.valueOf(i + 1);
                    map = new HashMap<String, String>();
                    map.put(TAG_GROUPNAME, groupname);
                    map.put(TAG_STAFF_COMPC, Staff_Complete_count);
                    map.put(TAG_STAFF_ASSC, Assig_Count);
                    map.put(TAG_STAFF_NAME, Staff_F_name);
                    map.put(TAG_STAFF_EMPC, Staff_Emp_code);
                    map.put(TAG_STAFF_ID, Staff_id);
                    map.put(TAG_STAFF_NO, track_no);
                    groupList.add(map);

                }
             } else {
                groupList.clear();
                    }
        } catch (JSONException e) {
            e.printStackTrace();
            }
        return json.toString();
    }

得到如下结果:

Technical- 1ty                  -(group_name - 1)
krish                             -(staff_firstname - 1)
Technical- 1ty                  -(group_name  - 1)
Ravi                               -(staff_firstname - 2)
Technical- 1ty                  -(group_name - 1)
Mercy                              -(staff_firstname - 3)
test group                      -(group_name - 2)
sam Ji                              - (staff_firstname -1)

但我需要得到如下结果:

Technical- 1ty                    -(group_name - 1)
krish                               -(staff_firstname - 1)
Ravi                                -(staff_firstname - 2)
Mercy                               -(staff_firstname - 3)
test group                        -(group_name -2) 
sam Ji                              -(staff_firstname - 1)

请给我一个解决方案?

如何删除重复的 group_name 值?

【问题讨论】:

  • 从错误中可以看出您正在尝试将 Json 对象转换为 Json 数组,将其更改为 json 对象
  • 是 TAG_GROUP_NAME=="groupname" 吗?
  • 请告诉我们这些常量代表什么
  • @Kartik_Koro 是的,完全是 TAG_GROUP_NAME=="groupname" 。在这里我需要获取上述值并在 android 客户端设置值。在上面的代码中也没有执行这一行:System. out.println("groups"+" "+" "+groups);它会捕获循环。请检查代码并为此提供解决方案?
  • 你的 json 中的 groupname 字段对应于 JSONObject 而不是 JSONArray。这将给出您遇到的错误。但是,我认为您在多个地方都犯了这个错误,如果您告诉每个最终常量代表什么字段,我可以尝试为您提供完整的解决方案。

标签: java android json arrays


【解决方案1】:
my point is:
1.get the values **from service to store vector or array** wat ever your wish...
2.get the **purticular value(groupname) from vector Using position..**
3.Eg:vector size 4...
3.In Adapter you should set 
**below code:**
for(int k=0;k<listvectorlocalsample.size();k++)
{
pojoitems=new SAmplepojo();
pojoitems=listvectorlocalsample.get(position);
String s1,s2l;
s1=pojoitems.getGroup_name().toString();
pojoss=listvectorlocalsample.get(positon+1);
s2=pojoitems.getGroup_name().toString();
if(s1.equalsIgnoreCase(s2l))
{
TextView.INVISIBLE;
}
}

【讨论】:

    【解决方案2】:

    所以如果我理解正确,您希望打印一个组名,例如。 “Technical- 1ty”,然后打印该组的所有成员。

    您的问题中没有包含输出代码,所以我只能假设您正在执行以下操作:

    for(HashMap<String,String> map : grouplist){
        print map.get(TAG_GROUPNAME);
        print map.get(TAG_STAFF_NAME);
    }
    

    很明显,它会先打印一个工作人员的组名,然后是他的名字。 你想要的是:

    1) Store data of each staff member into a class called staff, instead of a HashMap.
    2) Add each staff member to an ArrayList, say staff_members.
    3) Sort staff_members by group name field of staff class.
    4) Then with your ArrayList<Staff>staff_members (sorted by groupname )you can do the following:
    
    String current_group="";
    for(Staff staff_member: staff_members){
        if(!current_group.equals(staff_member.getGroupName()){
            current_group=staff_member.getGroupName();
            System.out.println(current_group);
        }
        System.out.println(staff_member.getFirstName());
    }
    

    我知道这对于一项简单的工作来说似乎需要做很多工作,但是为您的员工之类的东西正确地设置类而不只是一个哈希图是一种很好的编码实践。此外,如果您愿意,您可以为您的 staff_worker 类创建一个构造函数,在其中传递一个 JSONObject,它将为该对象分配适当的值。这将有助于使您的代码看起来整洁而专业,而不是在您的主代码中调用如此多的 map.put()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-10
      • 2020-10-25
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2022-01-03
      • 2015-02-22
      • 2021-09-05
      相关资源
      最近更新 更多