【问题标题】:How to display random items from arraylist<T> derived from a doInBackground?如何显示从 doInBackground 派生的 arraylist<T> 中的随机项?
【发布时间】:2017-02-27 07:13:06
【问题描述】:

所以我正在制作这个应用程序,它显示不同诗歌的数组列表 我首先从 API 请求诗歌,然后 Asynctask 以 Arraylist 的形式返回诗歌,我想从列表中显示 20 首随机诗歌。

这是异步任务代码

private class TitleAsynctask extends AsyncTask<URL,Void,List<view>> {


        private ProgressDialog progressDialog;
        @Override
        public List<view> doInBackground(URL... urls){

            URL url = Query_utils.createurl(POEM_TITLE);
            String json = "";
            Log.d(LOG_TAG,"this worked");
            {
                try {
                    json = Query_utils.makehttprequest(url);
                    Log.d(LOG_TAG, "make Httprequest works");
                } catch (IOException e) {

                }
            }
            List<view> title_view = Query_utils.extracttitlefromjson(json);
            return title_view;

        }

        @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
        @Override
        protected void onPostExecute(List<view> data) {
            madapter.clear();


            if (data != null && !data.isEmpty()){
                madapter.addAll(data);
            }
        }

    }

onCreate 代码是

 TitleAsynctask task = new TitleAsynctask();
    URL url = Query_utils.createurl(POEM_TITLE);
            task.execute(url);


            ArrayList<view > arr = new ArrayList<view>();

            final ListView poem_Title_list = (ListView) findViewById(R.id.list_item);
            madapter = new title_adapter(this ,arr);
            poem_Title_list.setAdapter(madapter);

【问题讨论】:

  • 希望this有帮助

标签: java android arraylist android-asynctask


【解决方案1】:

我可以想到两种方法:

  1. 只需使用随机数生成器生成一个介于 0 和条目数-1 之间的数字。这种方法的缺点是可以重复。

  2. 获取后随机排序列表。您可以使用Collections.shuffle(list) 执行此操作,这样您就不会得到任何重复,但您将对整个列表进行排序,如果有数百个条目而您只想显示 20 个,这可能是一种浪费。

【讨论】:

  • 当我这样做时,它会给出一个异常,说输入大小是 521(例如)并且大小是 0 ,我认为这意味着当我使用 ArrayList arr 时它的大小是 0,这很明显不是。
  • 你什么时候做排序?您必须在 postExecute 中执行此操作。由于获取是异步的,因此您不能在 onCreate 本身中执行此操作。
  • 我没有排序,但在我不调用其他方法之前它仍然有效
  • 对不起,我没有听懂你的意思。你在哪里调用访问它们的方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多