Android 混乱的JSON响应,给我带来麻烦
我一直在尝试给出JSON响应的所有东西,并在Android中使用它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": [
[{
"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;iresponse.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);