将值从 json 数据存储到 arraylist 并填充视图持有者

Posted

技术标签:

【中文标题】将值从 json 数据存储到 arraylist 并填充视图持有者【英文标题】:Store value to arraylist from json data and populate view holder 【发布时间】:2019-02-13 11:56:16 【问题描述】:

我正在制作一个应用程序,其中我从 url 接收一些 JSON 数据,如 在此显示 Image。基本上每个日期数组中都有 5 个对象,我正在使用这段代码从每个日期数组中获取会话和会话值

 JSONObject jsonObject = new JSONObject(response);
 JSONObject dataObj = jsonObject.getJSONObject("data");
      Iterator<String> iter = dataObj.keys();
      while (iter.hasNext()) 
              key = iter.next();
              JSONArray datesArray = dataObj.getJSONArray(key);
              sessionsfrom = new ArrayList<String>();

              JSONObject datesObjectt = datesArray.getJSONObject(4);

              for (int i = 0; i < datesArray.length(); i++) 
                  JSONObject datesObject = datesArray.getJSONObject(i);
                  sessionsfrom.add(datesObject.getString("session_from") + " - " +datesObject.getString("session_to") );
                  mBaseRecyclerAdapter.setItems(sessionsfrom);
                                    

在最后一行中,我将所有会话从和会话存储到 arraylist 中的值,并放入回收器视图的适配器中。这些会话正在应用程序中创建时间段,如Image 所示 现在我想要的是我必须将 bookingFound value 从 json 保存到带有 session from 和 session to value 的某个地方,即它不会显示在应用程序中,而是在每个插槽的背景中,bookingFoung 的每个值必须是存储以便在填充 viewholder 时,我可以检查哪些 bookingFound 插槽返回 true,哪些返回 false,以便我可以在 bookingFound 为 true 时将插槽的颜色更改为灰色

要填充视图持有者,我有以下 一段代码

   private BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder> mBaseRecyclerAdapter = new BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder>(CourtDetailsTimeViewHolder.class, R.layout.item_court_details_availability_time) 

    @Override
    protected void populateViewHolder(CourtDetailsTimeViewHolder viewHolder, String model, int position) 
       // SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
        //String name = preferences.getString("slotfound", "");
        viewHolder.mCheckBox.setOnCheckedChangeListener(null);
        viewHolder.mCheckBox.setText(model);
        viewHolder.mCheckBox.setChecked(getChecked(model));
        /*for (int i = 0; i < bookingcheck.size(); i++) 
            if (bookingcheck.get(i).contains("true")) 
                viewHolder.mCheckBox.setEnabled(false);
                viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details_disable);
             else 
                viewHolder.mCheckBox.setEnabled(true);
                viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details);
            
        */

    
;

在这段代码中,注释部分是我尝试过的,但它不起作用。我将 bookingFound 值放在 bookingcheck 数组列表中,然后检查它是否包含 true 然后禁用插槽,否则启用但它不起作用...请帮助

结论

1- store bookingFound json 值就像 session from 和 session to values 一样

2- 使用该值来启用或禁用应用程序上的插槽

【问题讨论】:

但我的问题不是那个:( 【参考方案1】:

快速修复

使用

datesObject.getString("session_from") + " - " +datesObject.getString("session_to")+"$"+datesObject.get("bookingFound").getAsBoolean()

在显示会话时使用

String Session = "02:00 AM - 02:30 AM$true";
String[] separated = currentString.split("$");
separated[0]; // this will contain "02:00 AM - 02:30 AM"
separated[1]; // this will contain "true"

for (int i = 0; i < bookingcheck.size(); i++) 
            if (bookingcheck.get(i).contains("true")) 
                viewHolder.mCheckBox.setEnabled(false);
                viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details_disable);
             else 
                viewHolder.mCheckBox.setEnabled(true);
                viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details);
            
        

【讨论】:

【参考方案2】:

您必须更改一些代码。首先,为会话创建一个自定义对象,以增强代码的性能和设计

public class SessionModel 

    String sessionFrom;
    String sessionTo;
    boolean sessionFound;


    public SessionModel(String sessionFrom, String sessionTo, boolean sessionFound) 
        this.sessionFrom = sessionFrom;
        this.sessionTo = sessionTo;
        this.sessionFound = sessionFound;
    


    public String getSessionFrom() 
        return sessionFrom;
    

    public void setSessionFrom(String sessionFrom) 
        this.sessionFrom = sessionFrom;
    

    public String getSessionTo() 
        return sessionTo;
    

    public void setSessionTo(String sessionTo) 
        this.sessionTo = sessionTo;
    

    public boolean isSessionFound() 
        return sessionFound;
    

    public void setSessionFound(boolean sessionFound) 
        this.sessionFound = sessionFound;
    

然后创建这个对象的arraylist,并在适配器“for循环完成后”使用这个arraylist

JSONObject jsonObject = new JSONObject(response);
    JSONObject dataObj = jsonObject.getJSONObject("data");
    Iterator<String> iter = dataObj.keys();
    while (iter.hasNext()) 
    key = iter.next();
    JSONArray datesArray = dataObj.getJSONArray(key);
    sessionsfrom = new ArrayList<SessionModel>();

    JSONObject datesObjectt = datesArray.getJSONObject(4);

    for (int i = 0; i < datesArray.length(); i++) 
    JSONObject datesObject = datesArray.getJSONObject(i);
    sessionsfrom.add(SessionModel(datesObject.getString("session_from"), datesObject.getString("session_to"), datesObject.getboolean("bookinFound")));
    
    mBaseRecyclerAdapter.setItems(sessionsfrom);

在你的适配器中

private BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder> mBaseRecyclerAdapter = new BaseRecyclerAdapter<String, CourtDetailsTimeViewHolder>(CourtDetailsTimeViewHolder.class, R.layout.item_court_details_availability_time) 

    @Override
    protected void populateViewHolder(CourtDetailsTimeViewHolder viewHolder, SessionModel model, int position) 

        viewHolder.mCheckBox.setOnCheckedChangeListener(null);
        viewHolder.mCheckBox.setText(model.getgetSessionFrom+"-"+model.getSessionTo);
        viewHolder.mCheckBox.setChecked(getChecked(model));

            if (model.get(i).isSessionFound()) 
                viewHolder.mCheckBox.setEnabled(false);
                viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details_disable);
             else 
                viewHolder.mCheckBox.setEnabled(true);
                viewHolder.mCheckBox.setBackgroundResource(R.drawable.slctr_bg_cb_challenges_details);
            


    
;

【讨论】:

更改为 seesionsfrom = ArrayList 然后在这一行上 "sessionsfrom.add(datesObject.getString("session_from"), datesObject.getString("session_to"), datesObject.getboolean("bookinFound "));" 它说arraylist中的model.sessionModel不能应用于java.lang.string 将(String sessionfrom)更改为(SessionModel sessionfrom) sessiosnfrom 已经是一个数组列表。在您说要制作模型之后,就完成了以下更改。即 ArrayList sessionsfrom = new ArrayList(); 好的兄弟让我看看这个

以上是关于将值从 json 数据存储到 arraylist 并填充视图持有者的主要内容,如果未能解决你的问题,请参考以下文章

将值从表单存储到网格

如何将值从数据库中的laravel存储到数组中?

将值从 JSP 发送到 servlet

如何将值从 ajax 传递到 portlet 页面

将值从 UITableViewCell 传递到详细视图

如何将值从反应本机应用程序传递到节点 js 后端