dimanche 14 février 2016

How to show the list of sqlite by order in android

I create an application for calculate university grades and I want to add an option to sort the database.

My database is based on sqlite and every time that I need to show the list of all the courses that were added by the user, I take them one by one and add the list Data Adaptar. It always shows the course by insert order, and I want now to give an option for change the list order to By name of course/By year and more..

I attached the code of the activity, DataListActivity:

package com.example.ido.grades;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.Collections;

public class DataListActivity extends ActionBarActivity {
    ListView listView;
    SQLiteDatabase sqLiteDatabase;
    CourseDbHelper courseDbHelper;
    Cursor cursor;
    ListDataAdaptar listDataAdaptar;
    Spinner sortSpinner;
    ArrayAdapter<String> sortAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.update_course);
        hideActionBar();
        sortSpinner = (Spinner)findViewById(R.id.sortSpinner);
        String[] sortItems = new String[]{"Sort by","Course name","Year","Semester", "Grade", "Points"};
        sortAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, sortItems);
        sortSpinner.setAdapter(sortAdapter);
        listView = (ListView) findViewById(R.id.list_view);
        listDataAdaptar = new ListDataAdaptar(getApplicationContext(),R.layout.row_layout);
        listView.setAdapter(listDataAdaptar);
        registerForContextMenu(listView);
        courseDbHelper = new CourseDbHelper(getApplicationContext());

        sqLiteDatabase = courseDbHelper.getReadableDatabase();
        cursor = courseDbHelper.getInformation(sqLiteDatabase);
        registerForContextMenu(listView);
        View header = getLayoutInflater().inflate(R.layout.header, null);
        listView.addHeaderView(header);


        if (!cursor.moveToFirst()){
        }
        else {
            do {
                String year,semester,course,points,grade;
                year = cursor.getString(0);
                semester = cursor.getString(1);
                course = cursor.getString(2);
                points = cursor.getString(3);
                grade = cursor.getString(4);
                DataProvider dataProvider  = new DataProvider(year,semester,course,points,grade);
                listDataAdaptar.add(dataProvider);
            }
            while (cursor.moveToNext());
        }
    }
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflater = getMenuInflater();
        if (((AdapterView.AdapterContextMenuInfo)menuInfo).position == 0) {
            return;
        }
        inflater.inflate(R.menu.menu_data_list, menu);

    }
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info =
                (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

        final int mySelectedRowIndex = info.position-1;


            switch (item.getItemId()) {
                case R.id.update_item:
                    courseDbHelper = new CourseDbHelper(getApplicationContext());
                    sqLiteDatabase = courseDbHelper.getReadableDatabase();
                    DataProvider raw2 = (DataProvider) listDataAdaptar.getItem(mySelectedRowIndex);

                    Intent i = new Intent(DataListActivity.this, UpdateCourseActivity.class);
                    String year = raw2.getYear();
                    String semester = raw2.getSemester();
                    String course = raw2.getCourse();
                    String points = raw2.getPoints();
                    String grade = raw2.getGrade();
                    int semIndex;
                    if (semester.equals("A'")) {
                        semIndex = 1;
                    } else if (semester.equals("B'")) {
                        semIndex = 2;
                    } else {
                        semIndex = 3;
                    }
                    i.putExtra("YEAR", year);
                    i.putExtra("SEMESTER", Integer.toString(semIndex));
                    i.putExtra("COURSE", course);
                    i.putExtra("POINTS", points);
                    i.putExtra("GRADE", grade);
                    i.putExtra("POS", Integer.toString(mySelectedRowIndex));

                    startActivity(i);


                    return true;
                case R.id.delete_item:
                    AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
                   DataProvider raw3 = (DataProvider) listDataAdaptar.getItem(mySelectedRowIndex);
                    builder1.setMessage("The course '" + raw3.getCourse() + "' Will delete, Are you sure?");
                    builder1.setCancelable(true);
                    builder1.setPositiveButton("Yes",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    delete(mySelectedRowIndex);
                                    dialog.cancel();
                                }
                            });
                    builder1.setNegativeButton("No",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dialog.cancel();
                                }
                            });

                    AlertDialog alert11 = builder1.create();
                    alert11.show();

                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }

        }

    public void onBackPressed() {
        startActivity(new Intent(this, MainActivity.class));
    }

    public void delete(int mySelectedRowIndex){
        courseDbHelper = new CourseDbHelper(getApplicationContext());
        sqLiteDatabase = courseDbHelper.getReadableDatabase();
        DataProvider raw = (DataProvider)listDataAdaptar.getItem(mySelectedRowIndex);
        courseDbHelper.deleteInformation(raw.getYear(), raw.getSemester(), raw.getCourse(), raw.getPoints(), raw.getGrade());
        Toast.makeText(this, "The course succesfully deleted", Toast.LENGTH_SHORT).show();
        finish();
        startActivity(getIntent());

    }
    private void hideActionBar() {
        //Hide the action bar only if it exists
        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }
    }
    }

CourseDBHelper.java:

package com.example.ido.grades;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class CourseDbHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME  = "COURSEINFO.DB";
    private static final int DATABASE_VERSION = 1;


    public String CREATE_QUERY = "CREATE TABLE " + UserCourse.NewCourseInfo.TABLE_NAME + "("+ UserCourse.NewCourseInfo.YEAR+" TEXT,"
            + UserCourse.NewCourseInfo.SEMESTER+" TEXT,"+ UserCourse.NewCourseInfo.COURSE+" TEXT,"+ UserCourse.NewCourseInfo.POINTS+" TEXT,"
            + UserCourse.NewCourseInfo.GRADE+" TEXT);";

    public  CourseDbHelper (Context context){

        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        Log.e("DATABASE_OPERATIONS","Database created/opened...");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_QUERY);
        Log.e("DATABASE_OPERATIONS", "Table created");

    }
    public void putInformation(String year, String semester, String course, String points,String grade,SQLiteDatabase db){
        ContentValues cv = new ContentValues();
        cv.put(UserCourse.NewCourseInfo.YEAR, year);
        cv.put(UserCourse.NewCourseInfo.SEMESTER, semester);
        cv.put(UserCourse.NewCourseInfo.COURSE, course);
        cv.put(UserCourse.NewCourseInfo.POINTS,points);
        cv.put(UserCourse.NewCourseInfo.GRADE, grade);
        db.insert(UserCourse.NewCourseInfo.TABLE_NAME, null, cv);
        Log.e("DATABASE_OPERATIONS", "One raw inserted");

    }
    public double updateInformation(String old_course,String year, String semester, String course, String points,String grade,SQLiteDatabase db){
        ContentValues cv = new ContentValues();
        cv.put(UserCourse.NewCourseInfo.YEAR, year);
        cv.put(UserCourse.NewCourseInfo.SEMESTER, semester);
        cv.put(UserCourse.NewCourseInfo.COURSE, course);
        cv.put(UserCourse.NewCourseInfo.POINTS,points);
        cv.put(UserCourse.NewCourseInfo.GRADE, grade);
        String Selection = UserCourse.NewCourseInfo.COURSE + " LIKE ?";
        String[] Selection_args = {old_course};
       double count =  db.update(UserCourse.NewCourseInfo.TABLE_NAME,cv,Selection,Selection_args);
        return count;
    }
    public Cursor getInformation(SQLiteDatabase db){
        Cursor cursor;
        String[] projections = {UserCourse.NewCourseInfo.YEAR,UserCourse.NewCourseInfo.SEMESTER,
                UserCourse.NewCourseInfo.COURSE, UserCourse.NewCourseInfo.POINTS,UserCourse.NewCourseInfo.GRADE};
          cursor=     db.query(UserCourse.NewCourseInfo.TABLE_NAME,projections,null,null,null,null,null );
        return cursor;
    }
    public void deleteInformation(String  year, String semester,
                                  String course,String points,  String grade){
        SQLiteDatabase db = null;
        try
        {
            db = this.getWritableDatabase();

            String where = UserCourse.NewCourseInfo.YEAR + " = ? AND "
                    + UserCourse.NewCourseInfo.SEMESTER + " = ? AND "
                    + UserCourse.NewCourseInfo.COURSE + " = ? AND "
                    + UserCourse.NewCourseInfo.POINTS + " = ? AND "
                    + UserCourse.NewCourseInfo.GRADE + " = ?";

            double iNumberDeleted = db.delete(
                    UserCourse.NewCourseInfo.TABLE_NAME,
                    where,
                    new String[]{year, semester, course, points, grade}
            );
            // you might want to evaluate the number of affected rows
        }
        catch (Exception ex)
        {
            Log.d("DB_DELETE", "...your data..." + "\n" + ex.getMessage());

        }
        finally
        {
            if (db != null)
                db.close();
        }



    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}

DataProvider.java:

package com.example.ido.grades;

/**
 * Created by Ido on 08/08/2015.
 */
public class DataProvider {

    private String year;
    private String semester;

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getSemester() {
        return semester;
    }

    public void setSemester(String semester) {
        this.semester = semester;
    }

    public String getCourse() {
        return course;
    }

    public void setCourse(String course) {
        this.course = course;
    }

    public String getPoints() {
        return points;
    }

    public void setPoints(String points) {
        this.points = points;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    private String course;
    private String points;
    private String grade;

    public DataProvider(String year, String semester,String course, String points, String grade){
        this.year=year;
        this.semester=semester;
        this.course=course;
        this.points=points;
        this.grade=grade;
    }
    }

I hope its enough to understand what i want. Thanks!

Aucun commentaire:

Enregistrer un commentaire