Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android - db.rawquery "order by" doesn't work

I want to order all my db entries using "ORDER BY" in my db table. I don't know what i'm doing wrong, but it doesn't work.
Here my code:

class NoteHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "note.db";
private static final int SCHEMA_VERSION = 1;


public NoteHelper(Context context){
    super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db){
    db.execSQL("CREATE TABLE Notes (_id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    //no-op, since will not be called until 2nd schema
    //version exists
}

public void insert(String note) {

    ContentValues cv = new ContentValues();
    cv.put("note", note);
    //you must pass it at lease one name of a colum
    getWritableDatabase().insert("Notes", "note", cv);
}

public void update(String id, String note){
    ContentValues cv = new ContentValues();
    String[] args = {id};

    cv.put("note", note);
    getWritableDatabase().update("Notes", cv, "_id=?", args);
}

public void delete(String id){
    getWritableDatabase().delete("Notes", "_id=?", new String[] {id});
}

public Cursor getAll(){
    return (getReadableDatabase().rawQuery("SELECT _id, note FROM Notes",  null));
}


public Cursor getAllSorted(){
    return (getReadableDatabase().rawQuery("SELECT note  FROM Notes  ORDER BY note  COLLATE NOCASE", null));

}

public String getNote(Cursor c){
    return(c.getString(1));
}

public Cursor getById(String id) {
    String[] args = {id};

    return(getReadableDatabase().rawQuery("SELECT _id, note FROM Notes WHERE _id=?", args));
}

 }

If someone knows where is the problem help me, thanks.

Ok here is the main code:

NoteAdapter adapter = null;
NoteHelper helper = null;
Cursor dataset_cursor = null;
EditText editNote = null;
//this is how track which note we are working on
String noteId = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    try{


    setContentView(R.layout.history);

    ListView list = (ListView)findViewById(R.id.list);
    editNote = (EditText)findViewById(R.id.myEditText);


    helper = new NoteHelper(this);
    dataset_cursor = helper.getAll();
    startManagingCursor(dataset_cursor);
    adapter = new NoteAdapter(dataset_cursor);
    list.setAdapter(adapter);
class NoteAdapter extends CursorAdapter {
    NoteAdapter(Cursor c){
        super(Ztutorial11.this, c);


    }




    public void bindView(View row, Context ctxt, Cursor c) {
        NoteHolder holder = (NoteHolder)row.getTag();
        holder.populateFrom(c, helper);
    }

    public View newView(Context ctxt, Cursor c, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View row = inflater.inflate(R.layout.row, parent, false);
        NoteHolder holder = new NoteHolder(row);

        row.setTag(holder);
        return (row);
    }
}

static class NoteHolder {
    private TextView noteText = null;

    NoteHolder(View row){
        noteText = (TextView)row.findViewById(R.id.note);


    }

    void populateFrom(Cursor c, NoteHelper helper) {
        noteText.setText(helper.getNote(c));
    }
}



   public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
MenuInflater awesome = getMenuInflater();
awesome.inflate(R.menu.menu_expresions, menu);
return true;

   }
   public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.Az:

    //something to do
    helper.getAllSorted();
    //update the view
    dataset_cursor.requery();
    return true;
case R.id.Za:

    //something to do

    return true;
case R.id.deleteall:

    //something to do
    helper.deleteAll();
    dataset_cursor.requery();
    return true;
case R.id.undo:

    //something to do

    return true;

}

return false;
 }



 };
like image 882
user1598550 Avatar asked Sep 30 '26 01:09

user1598550


2 Answers

dataset_cursor = helper.getAll();

You're not using getAllSorted()...

Additionally, onOptionsItemSelected() isn't being called anywhere, and even if it was, the return value to the call to getAllSorted() isn't being used, either.

like image 170
Izkata Avatar answered Oct 01 '26 14:10

Izkata


Try it that way:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.Az:
            dataset_cursor = helper.getAllSorted();
            adapter.changeCursor(dataset_cursor);
            return true;
        case R.id.Za:
            // something to do
            return true;
        case R.id.deleteall:
            // something to do
            helper.deleteAll();
            dataset_cursor.requery();
            adapter.notifyDataSetChanged();
            return true;
        case R.id.undo:
            // something to do
            return true;
    }
    return false;
}

first you assign the new sorted result to dataset_cursor then tell the adapter, that the cursor has changed. The deleteall case will probably need the adapter.notifyDataSetChanged(); line I added there.

like image 39
zapl Avatar answered Oct 01 '26 15:10

zapl