Theo Theo - 5 months ago 12
Android Question

Reading JSON boolean value

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

Answer

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

}