Reading JSON boolean value

扶醉桌前 提交于 2019-12-13 02:40:00

问题


In my app I have a boolean variable inside my json response.

[
{
    "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);

}

I read it using a setter method I created inside my Model class. So far so good. Now i want to go in my custom Adapter and do, if that json variable is true(teamLead),then change the text colours of all corresponding team leaders.

This is my Adapter code.

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);

    }
}
}

As you can see I get all the values I want and get them displayed. But I don't know how to say

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

Thanks,

Theo


回答1:


There is no need to make it so complex. Json also gives us a option to do it in a easy way.i.e., opt (optString(), optBoolean(), optJsonArray()) instead of get (getString(), getBoolean(), getJsonArray()). What this opt does is, it will check whether the given key is present in your json string or not. If the json string has the key it will return the value otherwise it will null (or) false for Boolean by default no Json exception will occurs. This will reduce unnecessary if condition's.In your case, you have checked whether the "teamLead" Boolean object exists or not, which can be easily achieved as shown below.

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

If you want to check the Boolean value using if condition, you can do it in the following way.

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

Hope this helps.




回答2:


Try this

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

Add this in your else part of api call.

m.setTeamLead(false);



回答3:


Use..

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

or

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

and put default value, and add to modelArrayList.add(m); out of block

 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);

Now it should be solved...

for adapter

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

}



来源:https://stackoverflow.com/questions/37941282/reading-json-boolean-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!