I am facing a problemm when i try to populate a RecyclerView with data from SQLite Database. The thing is that i get the data correctly but they do not show up in the RecyclerView.
My code:
@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);
itemsList = new ArrayList<>();
checkOrientation();
Toast.makeText(TimesActivity.this, "Data from DB:" +
"\nNames: " + databaseAdapter.getName().toString() + "\n" +
"Value: " + databaseAdapter.getValue().toString() + "\n" +
"Dattes: " + databaseAdapter.getDate().toString() + "\n" +
"Days: " + databaseAdapter.getDay().toString() + "\n"
, Toast.LENGTH_LONG).show();
new FetchDataTask().execute();
}
private void setupValues() {
try {
databaseAdapter.open();
for (int x = 0, y = 0, z = 0, q = 0; x<= databaseAdapter.getName().size()
&& y<= databaseAdapter.getValue().size()
&& z<= databaseAdapter.getDate().size()
&& q<= databaseAdapter.getDay().size();x++, y++, z++, q++){
itemsList.add(new ValueList(databaseAdapter.getName().get(x),
databaseAdapter.getValue().get(y),
databaseAdapter.getDate().get(z),
databaseAdapter.getDay().get(q)));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
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) {
setupValues();
return itemsList;
}
@Override
protected void onPostExecute(List<ValueList> valueLists) {
super.onPostExecute(valueLists);
pDialog.dismiss();
listAdapter = new TimesAdapter(TimesActivity.this, valueLists);
recyclerView.setAdapter(listAdapter);
}
}
and my database Adapter class
public List<String> getName(){
db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
if (cursor != null ) {
if (cursor.moveToFirst()) {
do {
String day = cursor.getString(cursor.getColumnIndex("NAME"));
names.add(day);
}while (cursor.moveToNext());
}
cursor.close();
}
db.close();
return names;
}
is how i get the data. The result:
Any ideas? The dialog never dismiss and the data are not showing.
Update
I modified a method to access all columns at 1 query like this:
public List<ValueList> getData(){
db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
if (cursor != null ) {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("NAME"));
String value = cursor.getString(cursor.getColumnIndex("VALUE"));
String day = cursor.getString(cursor.getColumnIndex("DAY"));
String date = cursor.getString(cursor.getColumnIndex("DATE"));
data.add(new ValueList(name, value, date, day));
}while (cursor.moveToNext());
}
Toast.makeText(context,"Data from query " + data.toString(), Toast.LENGTH_LONG).show();
cursor.close();
}
return data;
}
and my code like:
private void setupValues() {
try {
databaseAdapter.open();
//itemsList=databaseAdapter.getData();
} catch (SQLException e) {
e.printStackTrace();
}
listAdapter = new TimesAdapter(TimesActivity.this, databaseAdapter.getData());
recyclerView.setAdapter(listAdapter);
}
But still nothing is happening.
Aucun commentaire:
Enregistrer un commentaire