Reputation: 3149
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
Upvotes: 1
Views: 10727
Reputation: 1092
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
}
Upvotes: 1
Reputation: 1073
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.
Upvotes: 4
Reputation: 1388
Try this
if(modelList.getTeamLead())
{
// Change color
}
else
{
// Do not change
}
Add this in your else part of api call.
m.setTeamLead(false);
Upvotes: 1