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