mercredi 17 février 2016

Android get "logs" grouped by table column

I have table logs in db with columns PLACE, GRADE, PLATE NUMBER,LENGTH.. So What i want and what I made so far is that on DisplayLogsByPlace activity i have displayed list of logs grouped by place (so for example if I have places like this: London, Pariz, Berlin, Pariz, Berlin, Berlin) it displays me only one time place name (London, Pariz, Berlin) so this is good and working.

I put OnItemClickListener on list which should go to activity DisplayLogs and show me for example if I click on Pariz(in DisplaylogsByGroup activity) on DisplayLogs activity it should display me two logs(because of two times added place Pariz) with log id, grade, length?

This is my DisplayLogsByPlace activity

mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);
                startActivity(intent);
            }
        });
    }

    private class LogsByPlaceAdapter extends BaseAdapter {
        private LayoutInflater inflater;
        private List<Logs> logsList;

        public LogsByPlaceAdapter(List<Logs> logsList) {
            inflater = LayoutInflater.from(DisplayLogsByPlace.this);
            this.logsList = logsList;

        }

        @Override
        public int getCount() {
            return logsList.size();
        }

        @Override
        public Object getItem(int position) {
            return logsList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return logsList.get(position).getId();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.activity_display_logs_by_place, parent, false);
            }

            Logs log = logsList.get(position);
            ((TextView) convertView.findViewById(R.id.textShowDate)).setText(log.getCreatedAt().toString());
            ((TextView) convertView.findViewById(R.id.textShowPlace)).setText(log.getPlace());
            return convertView;
        } 

this is my DisplayLogs activity

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_listview);

        mainListView = (ListView) findViewById(R.id.ListViewItem);

        dbHandler = new LogsDBHandler(this);
        ArrayList<Logs> logsList = dbHandler.getAllLogsWithSamePlace();
        listAdapter = new LogsSamePlaceArrayAdapter(logsList);
        mainListView.setAdapter(listAdapter);        
    }

    private class LogsSamePlaceArrayAdapter extends BaseAdapter {
        private LayoutInflater inflater;
        private List<Logs> logsList;

        public LogsSamePlaceArrayAdapter(List<Logs> logsList) {
            inflater = LayoutInflater.from(LogsList.this);
            this.logsList = logsList;
        }

        @Override
        public int getCount() {
            return logsList.size();
        }

        @Override
        public Object getItem(int position) {
            return logsList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return logsList.get(position).getId();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.activity_logs_list, parent, false);
            }
            Logs log = logsList.get(position);
            ((TextView) convertView.findViewById(R.id.textPlate)).setText(log.getPlace());
            ((TextView) convertView.findViewById(R.id.textSort)).setText(log.getPlace());
            ((TextView) convertView.findViewById(R.id.textGrade)).setText(log.getPlace());
            ((TextView) convertView.findViewById(R.id.textDiameter)).setText(log.getDiameter());
            ((TextView) convertView.findViewById(R.id.textLength)).setText(log.getLength());
            return convertView;
        }
    }

This is how I grouped places

public ArrayList<Logs> getAllLogsGroupedByPlace() {
        ArrayList<Logs> logByPlaceList = new ArrayList<Logs>();
        String selectQuery = "SELECT * FROM " + TABLE_LOGS + " GROUP BY " + KEY_PLACE;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Logs log = new Logs();
                log.setId(cursor.getLong(0));
                log.setCreatedAt(cursor.getString(1));
                log.setPlace(cursor.getString(2));
                logByPlaceList.add(log);
            }while (cursor.moveToNext());
        }
        return logByPlaceList;
    }

And this is how i tried to get all logs from the same group by place, and that doesn't work for me

public ArrayList<Logs> getAllLogsWithSamePlace() {
        ArrayList<Logs> logPlaceList = new ArrayList<Logs>();
        String selectQuery = "SELECT * FROM " + TABLE_LOGS + " GROUP BY " + KEY_PLACE + " WHERE " + KEY_PLACE;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Logs log = new Logs();
                log.setId(cursor.getLong(0));
                log.setPlate_number(cursor.getString(1));
                log.setSort_id(cursor.getString(2));
                log.setGrade(cursor.getString(3));
                log.setDiameter(cursor.getString(4));
                log.setLength(cursor.getString(5));
            }while (cursor.moveToNext());
        }
        return  logPlaceList;
    }

So I need help to get all logs from the same place. I click on list where are three places Berlin, Pariz, London.. so i click on London and in next activity it should show me all logs with place London. I thing I messed up with dbHandler method, but any help is good!

Aucun commentaire:

Enregistrer un commentaire