Android 混乱的JSON响应,给我带来麻烦

Android 混乱的JSON响应,给我带来麻烦,android,json,android-volley,Android,Json,Android Volley,我一直在尝试给出JSON响应的所有东西,并在Android中使用它 [{ "id": "001", "firstName": "Mark", "lastName": "Mason", "role": "CEO", "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png" }, { "teamName": "iOS", "members": [

我一直在尝试给出JSON响应的所有东西,并在Android中使用它

[{
    "id": "001",
    "firstName": "Mark",
    "lastName": "Mason",
    "role": "CEO",
    "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
}, {
    "teamName": "iOS",
    "members": [{
        "id": "002",
        "firstName": "Olly",
        "lastName": "Berry",
        "role": "iOS Team Lead",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png",
        "teamLead": true
    }, {
        "id": "003",
        "firstName": "James",
        "lastName": "Frost",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "004",
        "firstName": "Liam",
        "lastName": "Nichols",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "005",
        "firstName": "Chris",
        "lastName": "Watson",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "006",
        "firstName": "Richard",
        "lastName": "Turton",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "007",
        "firstName": "Matt",
        "lastName": "Colliss",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "008",
        "firstName": "David",
        "lastName": "Gibson",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "009",
        "firstName": "Tom",
        "lastName": "Guy",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "010",
        "firstName": "Rich",
        "lastName": "Hodgkins",
        "role": "iOS Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }]
}, {
    "teamName": "Android",
    "members": [{
        "id": "011",
        "firstName": "David",
        "lastName": "Branton",
        "role": "Android Team Lead",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png",
        "teamLead": true
    }, {
        "id": "012",
        "firstName": "Dre",
        "lastName": "Pilipczuk",
        "role": "Android Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "013",
        "firstName": "Ray",
        "lastName": "Britton",
        "role": "Android Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "014",
        "firstName": "Charly",
        "lastName": "Murillo",
        "role": "Android Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }]
}, {
    "teamName": "Web",
    "members": [{
        "id": "015",
        "firstName": "Ryan",
        "lastName": "French",
        "role": "Web Team Lead",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png",
        "teamLead": true
    }, {
        "id": "016",
        "firstName": "James",
        "lastName": "Ward",
        "role": "Web Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "018",
        "firstName": "Adam",
        "lastName": "Smith",
        "role": "Web Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "019",
        "firstName": "Leonard",
        "lastName": "Da Costa",
        "role": "Web Developer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }]
}, {
    "teamName": "Design",
    "members": [{
        "id": "020",
        "firstName": "Hannah",
        "lastName": "Tempest",
        "role": "Design Team Lead",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png",
        "teamLead": true
    }, {
        "id": "021",
        "firstName": "Ellis",
        "lastName": "Reed",
        "role": "Designer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "022",
        "firstName": "Pete",
        "lastName": "Horsham",
        "role": "Designer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "023",
        "firstName": "Hemel",
        "lastName": "Dave",
        "role": "Designer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }, {
        "id": "024",
        "firstName": "Hannah",
        "lastName": "Corke",
        "role": "Designer",
        "profileImageURL": "http://developers.mub.lu/resources/profilePlaceholder.png"
    }]
}]
基本上,我想在一个回收视图中显示所有属于一个团队的人。即

"teamName":"iOS","teamName" : "Android","teamName" : "Android","Web" : "Design"
它尝试这样做:

   package testing.theo.androidtestproject.fragment;



public class TestingFragment extends Fragment {
public static final String IMAGE_URL =  
"http://developers.mub.lu/resources/";
private ArrayList<Model> modelArrayList;
private RecyclerView mRecyclerView;
private MyAdapter myAdapter;

public TestingFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_testing, container, false);

    modelArrayList = new ArrayList<>();

    mRecyclerView = (RecyclerView)v.findViewById(R.id.recycler_view);

    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(linearLayoutManager);

    myAdapter = new MyAdapter(getActivity(),modelArrayList);
    mRecyclerView.setAdapter(myAdapter);

    showTestData();
    return v;


}

public void showTestData()
  {



   // Request a string response from the provided URL.
   final JsonArrayRequest jsObjRequest = new JsonArrayRequest(Request.Method.GET, URLClass.URL, new Response.Listener<JSONArray>() {

       @Override
       public void onResponse(JSONArray response) {
           Log.d("Theo", response.toString());

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


               try {


                   JSONObject jsonObject = response.getJSONObject(i);


                       JSONArray teamMembersArray = 
        jsonObject.getJSONArray("members");
                       for(int j=0;j<teamMembersArray.length();j++){
                           Model m = new Model();

                           JSONObject teamObject = teamMembersArray.getJSONObject(i);
                           m.setFirstName(teamObject.getString("firstName"));
                           m.setLastName(teamObject.getString("lastName"));
                           m.setRole(teamObject.getString("role"));
                           modelArrayList.add(m);
                       }



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

           }


           //modelArrayList.add(m);
           // Update list by notifying the adapter of changes
           myAdapter.notifyDataSetChanged();
       }
   }, new Response.ErrorListener() {
       @Override
       public void onErrorResponse(VolleyError error) {

           //hidePD();
       }
   });
   AppController.getInstance().addToRequestQueue(jsObjRequest);

 }

 }
package testing.theo.androidtestproject.fragment;
公共类TestingFragment扩展了片段{
公共静态最终字符串图像\u URL=
"http://developers.mub.lu/resources/";
私有ArrayList模型ArrayList;
私人回收视图mRecyclerView;
私有MyAdapter MyAdapter;
公共测试片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图v=充气机。充气(R.layout.fragment_测试,容器,错误);
modelArrayList=新建ArrayList();
mRecyclerView=(RecyclerView)v.findViewById(R.id.recycler\u视图);
最终LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getActivity());
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(linearLayoutManager);
myAdapter=新的myAdapter(getActivity(),modelArrayList);
mRecyclerView.setAdapter(myAdapter);
showTestData();
返回v;
}
public void showTestData()
{
//从提供的URL请求字符串响应。
final JsonArrayRequest jsObjRequest=new JsonArrayRequest(Request.Method.GET,URLClass.URL,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(“Theo”,response.toString());

对于(int i=1;i跳过从1开始循环的第一个元素。
我还更改了您的循环以使用正确的变量,请告诉我它是否有效:

 @Override
 public void onResponse(JSONArray response) {
     Log.d("Theo", response.toString());

     for(int i = 1;i<response.length();i++){
     // i = 1 skips the first element

         try {
             JSONObject jsonObject = response.getJSONObject(i);
             JSONArray teamMembersArray = jsonObject.getJSONArray("members");

             for(int j=0;j<teamMembersArray.length();j++){
                 Model m = new Model();
                 JSONObject teamObject = teamMembersArray.getJSONObject(j);
                 m.setFirstName(teamObject.getString("firstName"));
                 m.setLastName(teamObject.getString("lastName"));
                 m.setRole(teamObject.getString("role"));
                 modelArrayList.add(m);
             }
         } catch (JSONException e) {
             e.printStackTrace();
         }
     }
}
@覆盖
公共void onResponse(JSONArray响应){
Log.d(“Theo”,response.toString());

对于(int i=1;i跳过从1开始循环的第一个元素。
我还更改了您的循环以使用正确的变量,请告诉我它是否有效:

 @Override
 public void onResponse(JSONArray response) {
     Log.d("Theo", response.toString());

     for(int i = 1;i<response.length();i++){
     // i = 1 skips the first element

         try {
             JSONObject jsonObject = response.getJSONObject(i);
             JSONArray teamMembersArray = jsonObject.getJSONArray("members");

             for(int j=0;j<teamMembersArray.length();j++){
                 Model m = new Model();
                 JSONObject teamObject = teamMembersArray.getJSONObject(j);
                 m.setFirstName(teamObject.getString("firstName"));
                 m.setLastName(teamObject.getString("lastName"));
                 m.setRole(teamObject.getString("role"));
                 modelArrayList.add(m);
             }
         } catch (JSONException e) {
             e.printStackTrace();
         }
     }
}
@覆盖
公共void onResponse(JSONArray响应){
Log.d(“Theo”,response.toString());

对于(int i=1;i几乎没有变化:您不需要第二个循环,也不需要检查对象的长度。在内部循环中重置
模型

试试这个

for(int i = 1;i<response.length();i++){ // skipping first object as you said
    try {
        JSONObject jsonObject = response.getJSONObject(i);
        //m.setRole(jsonObject.getString("teamName"));

        JSONArray teamMembersArray = jsonObject.getJSONArray("members");
        for(int j=0;j<teamMembersArray.length();j++){
            JSONObject teamObject = teamMembersArray.getJSONObject(j);
            Model m = new Model(); // reset model in inner loop
            m.setFirstName(teamObject.getString("firstName"));
            m.setLastName(teamObject.getString("lastName"));
            m.setRole(teamObject.getString("role"));
            modelArrayList.add(m);
        }

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

for(int i=1;i很少更改:您不需要第二个循环,也不需要检查对象的长度。在内部循环中重置
模型

试试这个

for(int i = 1;i<response.length();i++){ // skipping first object as you said
    try {
        JSONObject jsonObject = response.getJSONObject(i);
        //m.setRole(jsonObject.getString("teamName"));

        JSONArray teamMembersArray = jsonObject.getJSONArray("members");
        for(int j=0;j<teamMembersArray.length();j++){
            JSONObject teamObject = teamMembersArray.getJSONObject(j);
            Model m = new Model(); // reset model in inner loop
            m.setFirstName(teamObject.getString("firstName"));
            m.setLastName(teamObject.getString("lastName"));
            m.setRole(teamObject.getString("role"));
            modelArrayList.add(m);
        }

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

for(int i=1;i
response.getJSONObject(1);
…也许你的意思是
response.getJSONObject(i);
?有什么原因不能使用
gson
库将JSON直接解析到模型中吗?这里有一个很好的例子:
response.getJSONObject(1);
…也许你的意思是
response.getJSONObject(i)
?是否有理由不能使用
gson
库将JSON直接解析到模型中?下面是一个很好的例子:这不会将所有团队的所有人员都放在同一个列表中吗?modelArrayList.add(m);m没有被识别!@cricket_007是的,会的。这就是OP想要的。我解释的方式是每个人的名单team@Theo:可能您在我上次编辑之前使用了代码。只需将
modelArrayList.add(m);
移动到内部循环中,这不会将所有团队的所有人员都放在同一个列表中吗?modelArrayList.add(m);m没有被识别!@cricket_007是的,会的。这就是OP想要的。我解释的方式是每个人的名单team@Theo:可能您在我上次编辑之前使用了代码。只需在内部循环中移动
modelArrayList.add(m);