读取JSON布尔值

问题描述:

在我的应用程序中,我的json响应中有一个布尔变量。读取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); 

}

我用我我的模型类中创建了一个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. 
} 

感谢,

西奥

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

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

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

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

希望这会有所帮助。

+0

感谢您的回答。但有些奇怪的事情发生。当我第一次启动应用程序时,只有团队成员突出显示这是我想要的:)。但是当我向下滚动回收站视图时,也会突出显示一些非主角成员。这是我改变颜色的方式。 if(listItems.getTeamLead())holder.fName.setTextColor(mContext.getResources()。getColor(R.color.textColors)); holder.lName.setTextColor(mContext.getResources()。getColor(R.color.textColors)); holder.jobRole.setTextColor(mContext.getResources()。getColor(R.color.textColors)); } – Theo

+0

有什么问题,但我没有看到它。 – Theo

+0

@Theo:您必须编写其他条件,其中您将文本颜色更改为默认值。我相信现在你的问题将得到解决。 – Jeevanandhan

试试这个

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

在API调用的其他的部分添加此。

m.setTeamLead(false); 
+0

感谢您的回复。我得到一个JSON异常虽然:(java.lang.NullPointerException:试图调用空对象引用虚拟方法'布尔java.lang.Boolean.booleanValue()' – Theo

+0

这意味着该布尔变量未初始化。 – Theo

+0

@Theo可能会尝试调试它 – Nisarg

使用..

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(米); 出块

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 

}

+0

不。空指针异常:( – Theo

+0

使用“listItems”而不是modelList – Kush

+0

这里是“if(teamObject.has(”teamLead“)&& teamObject.isNull(”teamLead“))m.setTeamLead(teamObject.getBoolean(”teamLead“ )); }“所以你应该从响应中得到空值,请检查.. – Kush