2012-08-14 1 views
3

Я хочу заказать все мои записи db с помощью «ORDER BY» в моей таблице db. Я не знаю, что я делаю неправильно, но это не работает.
Вот мой код:android - db.rawquery «упорядочить по» не работает

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)); 
} 

} 

Если кто-то знает, где проблема помочь мне, спасибо.

Ok здесь основной код:

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; 
} 



}; 
+0

Вы можете объяснить, что означает «это не работает»? 'getAllSorted()' даст вам отсортированный результат, если это не приведет к сбою. – zapl

+0

Я имею в виду отсутствие крушения, но ничего не случилось. – user1598550

+0

Вы получаете «null» в результате этого метода или получаете курсор с 0 строками или ваше приложение ничего не показывает? Не могу помочь, если вы не знаете, что именно происходит не так. – zapl

ответ

1

Попробуйте это таким образом:

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; 
} 

первым присвоить новый отсортированный результат dataset_cursor затем сказать адаптер, что курсор изменился. Для случая deleteall, вероятно, понадобится строка adapter.notifyDataSetChanged();, добавленная мной.

+0

Fuaa как BOSS! Это сработало! Большое спасибо! – user1598550

+0

Ну и имейте в виду, что cursor.requery() устарел прямо сейчас) – UnknownJoe

1

Я понятия не имею, но вот некоторые догадки/вещи, чтобы попробовать.

1) Кажется, что два пробела после заметки и перед КОЛЛАТА. Не уверен, что это имеет значение. (На самом деле, по-видимому, существуют дополнительные пробелы в нескольких разных местах этой строки SQL)

2) Что происходит, когда вы удаляете предложение COLLATE NOCASE? Просто интересно, если это проблема, или если это фактическое предложение ORDER BY, которое терпит неудачу.

3) Вам нужно указать ASC/DESC после COLLATE NOCASE?

+0

Я сделал все, кроме = ничего не произошло, и никаких сбоев: S – user1598550

+1

Покажите нам код, который вызывает этот getAllSorted(). Откуда вы знаете, что он не работает? Вы сопоставляете его с пользовательским интерфейсом? Печать в журналах? – Gophermofur

2
dataset_cursor = helper.getAll(); 

Вы не используете getAllSorted() ...

Кроме того, onOptionsItemSelected() не вызывается в любом месте, и даже если бы это было, то возвращаемое значение для вызова getAllSorted() не используется, или.

+0

да извините, я копирую это, но у меня есть onOptionItemВыбранный извините, но = не работает: S – user1598550

Смежные вопросы