Android 在列表中加载数据花费的时间太长

Android 在列表中加载数据花费的时间太长,android,database,sqlite,Android,Database,Sqlite,当我试图用SQLite数据库中的数据填充RecyclerView时,我面临一个问题。问题是我正确地获取了数据,但它们没有显示在RecyclerView中 我的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_times);

当我试图用
SQLite数据库中的数据填充
RecyclerView
时,我面临一个问题。问题是我正确地获取了数据,但它们没有显示在
RecyclerView

我的代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_times);
        toolbar = (Toolbar)findViewById(R.id.toolBar);
        setSupportActionBar(toolbar);
        recyclerView = (RecyclerView)findViewById(R.id.recycler_list);
        databaseAdapter = new DatabaseAdapter(TimesActivity.this);
        checkOrientation();
        new FetchDataTask().execute();
    }

    private class FetchDataTask extends AsyncTask<Void, Void, List<ValueList>>{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(TimesActivity.this);
            pDialog.setTitle("Please Wait");
            pDialog.setMessage("Loading data...");
            pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            pDialog.setIndeterminate(true);
            pDialog.show();
        }

        @Override
        protected List<ValueList> doInBackground(Void... params) {
            itemsList = new ArrayList<>();
            try {
                databaseAdapter.open();
                for (int position = 0; position<= databaseAdapter.getData().size(); position++){
                     String name = databaseAdapter.getData().get(position).getName();
                     String value = databaseAdapter.getData().get(position).getValue();
                     String date = databaseAdapter.getData().get(position).getDate();
                     String day = databaseAdapter.getData().get(position).getDay();
                     itemsList.add(new ValueList(name, value, date, day));
                }
                databaseAdapter.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return itemsList;
        }

        @Override
        protected void onPostExecute(List<ValueList> valueLists) {
            super.onPostExecute(valueLists);
            pDialog.dismiss();
            listAdapter = new TimesAdapter(TimesActivity.this, valueLists);
            recyclerView.setAdapter(listAdapter);
        }
    }
TimeAdapter类:

public class TimesAdapter extends RecyclerView.Adapter<TimesAdapter.TimesViewHolder>{

    Context context;
    List<ValueList> items;

    public TimesAdapter(Context context, List<ValueList> items) {
        this.context = context;
        this.items = items;
    }

    @Override
    public TimesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false);
        TimesViewHolder holder = new TimesViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(TimesViewHolder holder, int position) {
        holder.name.setText(items.get(position).getName());
        holder.value.setText(items.get(position).getValue());
        holder.day.setText(items.get(position).getDay());
        holder.date.setText(items.get(position).getDate());
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class TimesViewHolder extends RecyclerView.ViewHolder{

        private TextView name, value, day, date;

        public TimesViewHolder(View itemView) {
            super(itemView);
            name = (TextView)itemView.findViewById(R.id.name_column);
            value = (TextView)itemView.findViewById(R.id.value_column);
            day = (TextView)itemView.findViewById(R.id.day_column);
            date = (TextView)itemView.findViewById(R.id.date_column);
        }

    }
}

有什么想法吗?对话框永远不会关闭,数据也不会显示。

因此。。。你每行查询8次,然后抱怨速度慢?为什么每行查询4次?来吧。。。你是一个有经验的用户。888代表应该有意义。您已经将
rawQuery()
设置为检索所有列。只需返回所需的全部4个值。您正在查询所有列,但您只是在列表中添加
name
,添加所有列,以便
name
value
dates
days
,但在
getName()
中查询所有内容时,为什么还有4个其他方法,将它们全部添加到一个列表中,然后通过调用
yourList.getValue()
调用它们,其中
getValue()
是您要检索的数据,通过这种方式,您可以优化for循环以及
for(int i=0;i
然后查询您的列表,该列表中已经包含所有数据。。。你每行查询8次,然后抱怨速度慢?为什么每行查询4次?来吧。。。你是一个有经验的用户。888代表应该有意义。您已经将
rawQuery()
设置为检索所有列。只需返回所需的全部4个值。您正在查询所有列,但您只是在列表中添加
name
,添加所有列,以便
name
value
dates
days
,但在
getName()
中查询所有内容时,为什么还有4个其他方法,将它们全部添加到一个列表中,然后通过调用
yourList来分别调用它们。getValue()
其中
getValue()
是您要检索的数据。通过这种方式,您可以优化for循环以及
for(int i=0;i
然后查询已经包含所有数据的列表
public class TimesAdapter extends RecyclerView.Adapter<TimesAdapter.TimesViewHolder>{

    Context context;
    List<ValueList> items;

    public TimesAdapter(Context context, List<ValueList> items) {
        this.context = context;
        this.items = items;
    }

    @Override
    public TimesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false);
        TimesViewHolder holder = new TimesViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(TimesViewHolder holder, int position) {
        holder.name.setText(items.get(position).getName());
        holder.value.setText(items.get(position).getValue());
        holder.day.setText(items.get(position).getDay());
        holder.date.setText(items.get(position).getDate());
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class TimesViewHolder extends RecyclerView.ViewHolder{

        private TextView name, value, day, date;

        public TimesViewHolder(View itemView) {
            super(itemView);
            name = (TextView)itemView.findViewById(R.id.name_column);
            value = (TextView)itemView.findViewById(R.id.value_column);
            day = (TextView)itemView.findViewById(R.id.day_column);
            date = (TextView)itemView.findViewById(R.id.date_column);
        }

    }
}
public class ValueList {
    private String name, value, date, day;

    public ValueList(String name, String value, String date, String day) {
        this.name = name;
        this.value = value;
        this.date = date;
        this.day = day;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getDay() {
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }
}