Java 如何显示arraylist中的随机项<;T>;来自于一个doInBackground?

Java 如何显示arraylist中的随机项<;T>;来自于一个doInBackground?,java,android,arraylist,android-asynctask,Java,Android,Arraylist,Android Asynctask,所以我制作了这个应用程序,它显示了不同诗歌的列表 我首先从API请求诗歌,然后Asynctask以Arraylist I wand的形式返回诗歌,以显示列表中的20首随机诗歌 这是异步任务代码 private class TitleAsynctask extends AsyncTask<URL,Void,List<view>> { private ProgressDialog progressDialog; @Override

所以我制作了这个应用程序,它显示了不同诗歌的列表 我首先从API请求诗歌,然后Asynctask以Arraylist I wand的形式返回诗歌,以显示列表中的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);
            }
        }

    }
私有类TitleAsynctask扩展异步任务{
私有进程对话;
@凌驾
公共列表doInBackground(URL…URL){
URL URL=Query\u utils.createurl(诗歌标题);
字符串json=“”;
Log.d(Log_标签,“这起作用”);
{
试一试{
json=Query_utils.makehttprequest(url);
Log.d(Log_标签,“使Httprequest工作”);
}捕获(IOE异常){
}
}
List title\u view=Query\u utils.extracttitlefromjson(json);
返回标题视图;
}
@RequiresApi(api=Build.VERSION\u code.HONEYCOMB)
@凌驾
受保护的void onPostExecute(列表数据){
madapter.clear();
if(data!=null&&!data.isEmpty()){
madapter.addAll(数据);
}
}
}
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);
TitleAsynctask task=new TitleAsynctask();
URL URL=Query\u utils.createurl(诗歌标题);
task.execute(url);
ArrayList arr=新的ArrayList();
最终列表视图标题列表=(列表视图)findViewById(R.id.list\u项);
madapter=新标题_适配器(此,arr);
诗篇标题列表。setAdapter(madapter);

我可以想出两种方法:

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

  • 获取后对列表进行随机排序。你可以这样做,你不会得到任何重复,但你会排序整个列表,这可能是一种浪费,如果有数百个条目,你只想显示20


  • 希望有帮助当我这样做时,它会给出一个异常,说输入大小是521(例如),大小是0,我想这意味着当我使用ArrayList arr时,它的大小是0,这显然不是。你什么时候进行排序?您必须在postExecute中执行。由于提取是异步的,所以不能在onCreate中进行。我没有排序,但它仍然可以工作,直到我没有调用其他方法为止。对不起,我没有理解你的意思。在哪里调用访问它们的方法?