读JSON布尔值

时间:2016-06-21 10:00:13

标签: android json boolean adapter

在我的应用程序中,我的json响应中有一个布尔变量。

[
{
    "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"
        }
    ]   
}
]

       @Override
       public void onResponse(JSONArray response) {
           Log.d("Theo", response.toString());
           //I use i=1 to bypass the first JSON object which doesn't contain  
           the object member.
           //If i set i=0,then I will get an exception.
           for(int i = 1;i<response.length();i++){


               try {

                   //Here I read the 4 objects.
                   JSONObject jsonObject = response.getJSONObject(i);

                       //I get the members array for JSON object
                       JSONArray teamMembersArray = jsonObject.getJSONArray("members");

                       for(int j=0;j<teamMembersArray.length();j++){

                           //The model class which contains the setters/getters
                           //in order to "deserialize" the JSON objects into string objects.
                           Model m = new Model();


                           JSONObject teamObject = teamMembersArray.getJSONObject(j);
                           //I am searching if the teamLead object exists.If yes
                           //then set it to true by reading it! If not then read
                           //the next members!
                           if (teamObject.has("teamLead") && teamObject.isNull("teamLead")) {
                               m.setTeamLead(teamObject.getBoolean("teamLead"));
                           }else {

                               m.setId(teamObject.getInt("id"));
                               m.setProfileImageURL(teamObject.getString("profileImageURL"));
                               m.setFirstName(teamObject.getString("firstName"));
                               m.setLastName(teamObject.getString("lastName"));
                               m.setRole(teamObject.getString("role"));


                               //Finally I am adding the string objects into an ArrayList.
                               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);

}

我使用在Model类中创建的setter方法读取它。到现在为止还挺好。 现在我想进入我的自定义适配器并执行,如果该json变量为true(teamLead),则更改所有相应团队负责人的文本颜色。

这是我的适配器代码。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RowHolderClass> {

private List<Model> modelList;
private Context mContext;
private int focused;
private ImageLoader mImageLoader;

public MyAdapter(Activity activity,List<Model> modelList) {
    this.modelList = modelList;
    this.mContext = activity;
}

@Override
public RowHolderClass onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_row,null);

    final RowHolderClass holder = new RowHolderClass(v);
    return holder;
}

@Override
public void onBindViewHolder(RowHolderClass holder, int position) {
    final Model listItems = modelList.get(position);
    holder.itemView.setSelected(focused==position);

    holder.getLayoutPosition();


    mImageLoader = AppController.getInstance().getImageLoader();

    holder.imageView.setImageUrl(listItems.getProfileImageURL(),mImageLoader);

    holder.fName.setText(Html.fromHtml(listItems.getFirstName()));
    holder.lName.setText(Html.fromHtml(listItems.getLastName()));
    holder.jobRole.setText(Html.fromHtml(listItems.getRole()));
    holder.teamLeader.booleanValue();
     //holder.fName.setTextColor(mContext.getResources().getColor(R.color.textColors));


    holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String first_name = listItems.getFirstName();
            String last_name = listItems.getLastName();
            String job_role = listItems.getRole();
            String image_url = listItems.getProfileImageURL();
            String id= String.valueOf(listItems.getId());


            Intent i = new Intent(mContext, NewActivity.class);
            i.putExtra("firstName",first_name);
            i.putExtra("lastName",last_name);
            i.putExtra("jobRole",job_role);
            i.putExtra("imageUrl",image_url);
            i.putExtra("memberId",id);
            mContext.startActivity(i);
        }
    });
}

@Override
public int getItemCount() {
    return (null != modelList?modelList.size() :0 );
}
//ViewHolder algorithm used to read the data of the row fast.
class RowHolderClass extends RecyclerView.ViewHolder {

    protected  NetworkImageView imageView;
    protected TextView fName, lName, jobRole;
    protected  RelativeLayout relativeLayout;
    protected  Boolean teamLeader;

    public RowHolderClass(View itemView) {
        super(itemView);

        this.relativeLayout = (RelativeLayout) itemView.findViewById(R.id.recLayout);
        this.imageView = (NetworkImageView) itemView.findViewById(R.id.imageView);
        this.fName = (TextView) itemView.findViewById(R.id.firstName);
        this.lName = (TextView) itemView.findViewById(R.id.lastName);
        this.jobRole = (TextView) itemView.findViewById(R.id.roleView);

    }
}
}

正如您所看到的,我获得了我想要的所有值并将其显示出来。但我不知道怎么说

if(teamLeader is true){
   //then change the text colours of the corresponding team leaders.
}

谢谢,

西奥

3 个答案:

答案 0 :(得分:2)

没有必要让它如此复杂。 Json还为我们提供了一个简单方法的选项。即,opt(optString(),optBoolean(),optJsonArray())而不是get(getString(),getBoolean(),getJsonArray())。这个选项的作用是,它会检查你的json字符串中是否存在给定的键。如果json字符串有键,它将返回值,否则它将为null(或)false为布尔值,默认情况下不会发生Json异常。这将减少不必要的if条件。在你的情况下,你已经检查了“teamLead”布尔对象是否存在,这可以很容易地实现,如下所示。

m.setTeamLead(teamObject.optBoolean("teamLead", false));

如果要使用if条件检查布尔值,可以按以下方式进行。

if (m.getTeamLead()) {
//True
} else {
//False
}

希望这有帮助。

答案 1 :(得分:1)

试试这个

if(modelList.getTeamLead())
 {
   // Change color 
 }
 else 
 {
    // Do not change
 }

在api调用的其他部分添加此内容。

m.setTeamLead(false);

答案 2 :(得分:1)

使用..

 if(listItems.getTeamLead())
     {
       //then change the text colours of the corresponding team leaders.
     }

if(listItems.getTeamLead()==true)
 {
  //then change the text colours of the corresponding team leaders.
 }

并输入默认值,并添加到modelArrayList.add(m); 在街区外

 if (teamObject.has("teamLead") && (!teamObject.isNull("teamLead"))) {
                           m.setTeamLead(teamObject.getBoolean("teamLead"));
                       }else {
                         m.setTeamLead(false);
                    //DEFAULTVALUE
                       }    
                           m.setId(teamObject.getInt("id"));
                           m.setProfileImageURL(teamObject.getString("profileImageURL"));
                           m.setFirstName(teamObject.getString("firstName"));
                           m.setLastName(teamObject.getString("lastName"));
                           m.setRole(teamObject.getString("role"));

                           //Finally I am adding the string objects into an ArrayList.


        modelArrayList.add(m);

现在应该解决......

适配器

if(listItems.getTeamLead()){
 //color
}else{
//default  setcolor

}