繁体   English   中英

如何显示arraylist中的随机项目 <T> 源自doInBackground?

[英]How to display random items from arraylist<T> derived from a doInBackground?

因此,我正在制作一个显示不同诗的arrayList的应用程序,我首先从API请求诗,然后Asynctask以Arraylist的形式返回诗,以显示列表中的20首随机诗。

这是Asynctask代码

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);

我可以想到两种方式:

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

  2. 提取后随机排序列表。 您可以使用Collections.shuffle(list)进行此操作,这样就不会产生任何重复,但是您将对整个列表进行排序,如果有成百上千个条目并且只想显示20个,这可能是浪费。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM