读取 JSON 布尔值

Reading JSON boolean value

在我的应用程序中,我的 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);

}

我使用我在模型 class 中创建的 setter 方法读取它。到目前为止,一切都很好。 现在我想进入我的自定义适配器并执行,如果 json 变量为真(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.
}

谢谢,

西奥

试试这个

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

将此添加到 api 调用的其他部分。

m.setTeamLead(false);

使用..

 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

}

没必要弄得那么复杂。 Json 还为我们提供了一个简单的选项 way.i.e., opt (optString(), optBoolean(), optJsonArray()) 而不是 get (getString ()、getBoolean()、getJsonArray())。这个 opt 的作用是,它会检查给定的键是否存在于你的 json 字符串中。如果 json 字符串具有键,它将 return 值,否则它将为布尔值 null(或)false 默认情况下不会发生 Json 异常。这将减少不必要的 if condition's.In 你的情况,你已经检查了 "teamLead" 布尔对象是否存在,这可以很容易地实现,如下所示。

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

如果你想使用if条件检查布尔值,你可以通过以下方式进行。

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

希望对您有所帮助。