【问题标题】:Arraylist become null数组列表变为空
【发布时间】:2016-12-15 05:41:06
【问题描述】:

我从以前的活动中获取 id,如果 id 为 null,则我解析数据并将其存储在 arraylist 中,但如果它不为 null,则我不解析数据并尝试在 listview 中设置 arraylist,但它显示 arraylist null

       mRecyclerView = (ListView) findViewById(R.id.filter_orderlist);
        makeJsonArrayRequestCountry();

    }


    private void makeJsonArrayRequestCountry() {

        showpDialog();
        JsonArrayRequest req = new JsonArrayRequest( filter_url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d("ress", response.toString());

                        filterList =new ArrayList<FilterModelClass>();
                        // Parsing json
                        for (int i = 0; i < response.length(); i++) {
                            try {

                                JSONObject obj = response.getJSONObject(i);

                                String heder=obj.getString("filterName");

                                System.out.println("Hader"+heder);

                                JSONArray details=obj.getJSONArray("getParam");
                                for(int j=0;j<details.length();j++)
                                {

                                    JSONObject det=details.getJSONObject(j);
                                    FilterModelClass movie = new FilterModelClass();
                                    movie.setFilter_Name(det.getString("paramName"));
                                    String cityid=movie.setFilter_ID(det.getString("paramId"));
                                    filterList.add(movie);

                                }

                                mAdapter = new MyCustomBaseAdapter(FilterListActivity.this,filterList);
                                mRecyclerView.setAdapter(mAdapter);

                                btnSelection.setOnClickListener(new View.OnClickListener() {

                                    @Override
                                    public void onClick(View v) {
                                        String data = "";
                                        List<FilterModelClass> stList = ((MyCustomBaseAdapter) mAdapter)
                                                .getStudentist();

                                        for (int i = 0; i < stList.size(); i++) {
                                            FilterModelClass singleStudent = stList.get(i);
                                            if (singleStudent.isselected() == true) {

                                                data = data+singleStudent.getFilter_ID().toString()+",";

                                            }

                                        }
                                        Intent intent=new Intent();
                                        intent.putExtra("filterid",data);
                                        setResult(RESULT_OK, intent);
                                        FilterListActivity.this.finish();

                                        Toast.makeText(FilterListActivity.this,
                                                "Selected Students:" + data, Toast.LENGTH_LONG)
                                                .show();


                                    }
                                });
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }

                        // notifying list adapter about data changes
                        // so that it renders the list view with updated data

                        hidepDialog();

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("ErrorVolley", "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                hidepDialog();

            }
        });

        MyApplication.getInstance().addToReqQueue(req, "jreq");
    }


    private void showpDialog() {
        if (!pDialog.isShowing())
            pDialog.show();
    }

    private void hidepDialog() {
        if (pDialog.isShowing())
            pDialog.dismiss();
    }



    @Override
    public void onClick(View v) {

        switch (v.getId()) {


            default:
                break;
        }

    }




    public class MyCustomBaseAdapter extends BaseAdapter  {
        private  List<FilterModelClass> searchArrayList;
        ViewHolder holder;
        private LayoutInflater mInflater;
        SharedPreferences.Editor editor;
        Context context;

        public MyCustomBaseAdapter(Context mainActivity, List<FilterModelClass> results) {
            context = mainActivity;
            searchArrayList = results;
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return searchArrayList.size();

        }

        public Object getItem(int position) {
            return searchArrayList.get(position);
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(final int position, View convertView, ViewGroup parent)
        {
            SharedPreferences sharedPrefs = context.getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE);


            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.sorting_items, null);
                holder = new ViewHolder();
                holder.txtName = (TextView) convertView.findViewById(R.id.tvName);
                holder.cB = (CheckBox)convertView.findViewById(R.id.chkSelected);

                convertView.setTag(holder);
            }
            else {
                holder = (ViewHolder) convertView.getTag();
            }


            editor = sharedPrefs.edit();

            holder.txtName.setText(searchArrayList.get(position).getFilter_Name());

            holder.cB.setChecked(sharedPrefs.getBoolean("CheckValue" + position, false));
            holder.cB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


                    editor.putBoolean("CheckValue" + position, isChecked);
                    editor.commit();
                }});
            return convertView;
        }

        class ViewHolder {
            TextView txtName;
            CheckBox cB;
        }
        public List<FilterModelClass> getStudentist() {
            return searchArrayList;
        }

    }
}

【问题讨论】:

  • I/System.out﹕datacat nullnull
  • 应该是10-30行堆栈跟踪
  • @Shubhank 我的应用没有崩溃,但 recyclerview 什么也不显示
  • filterList 在哪里声明和初始化?
  • 但它显示 arraylist null.. 你怎么能这么说?你有没有做任何日志或检查?

标签: android json arraylist android-recyclerview


【解决方案1】:

问题出在这部分

if(filtrid!=null)
    {
        System.out.println("datacat null"+filterList);
        mAdapter = new CardViewDataAdapter(filterList);
        mRecyclerView.setAdapter(mAdapter);

    }

您阅读了filtrid,但在这种情况下您没有初始化您的filterList

编辑

从 Intent Extras 中检索 filtrid 与填充 filterList 不同。您可能会以与传递 filtrid 相同的方式将 filterList 作为 JSON-String 传递。然后像在makeJsonArrayRequestCountry() 中所做的那样解析 JSON 字符串。更好的方法是持久存储列表(SharedPreferences、SQL、...),或者根本不存储它。每当您启动该活动时,只需从服务器加载列表即可。

【讨论】:

  • 那有什么解决办法?
  • 我按照你说的进行了初始化,但是 recyclerview 仍然是空的 if(filtrid!=null) { filterList =new ArrayList(); System.out.println("datacat null"+filterList); mAdapter = new CardViewDataAdapter(filterList); mRecyclerView.setAdapter(mAdapter);
  • I/System.out﹕datacat null[]
  • 因为您没有将任何数据放入该空数组中。我仍在尝试了解您想用您的代码做什么......
【解决方案2】:

您尚未将LayoutManager 设置为您的RecyclerView: 使用它来将LayoutManager 设置为您的RecyclerView

 mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

在创建时

【讨论】:

  • mRecyclerView.setAdapter(mAdapter); 之后
  • 你也可以在@AshuKumar之前设置
  • 好点。我不知道,没有默认的 layoutManager。见Docs
  • if(filtrid!=null) { filterList =new ArrayList(); System.out.println("datacat null"+filterList); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new CardViewDataAdapter(filterList); mRecyclerView.setAdapter(mAdapter); }
  • @ColdFire 你能看到吗?我正在尝试这种方式,但后来我发现,如果每次都调用服务,最好调用一次。这就是为什么我只尝试调用 json 一次
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 2018-06-15
  • 2021-12-28
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多