jeudi 21 janvier 2016

Data takes too much time to load in the list

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:

enter image description here

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