SQL-запрос Android не упорядочивает данные - PullRequest
0 голосов
/ 31 октября 2010

Я написал небольшое приложение для Android, которое захватывает некоторые данные и отображает их в ListView.

Я хочу отсортировать список в порядке возрастания (без проблем).Но когда я добавляю новый элемент, он остается в нижней части списка, даже когда представление / приложение перезагружается.Кажется, что сортируются только данные, это записи, которые были созданы в методе OnCreate () базы данных.

Я не уверен, какой код предоставить, но я начну с показа фрагментов DBAdapterзатем класс из основного приложения.

Запрос на построение базы данных:

    private static final String DATABASE_CREATE =
    "create table "+ DATABASE_TABLE
    + "("
    + FIELD_ROWID+" integer primary key autoincrement, "
    + FIELD_NAME +" varchar(30) not null, " + FIELD_TELEPHONE + " varchar(20) not null, " 
    + FIELD_ADDRESS + " text not null,"
    + FIELD_URL + " varchar(255) not null);";

Функция для получения списка данных:

    public Cursor getRestaurants() 
{
 Cursor result = null;
 try{
  result = db.query(DATABASE_TABLE, new String[] {FIELD_ROWID, FIELD_NAME}, null, null, null, null, FIELD_NAME+" ASC");
 }
 catch (Exception e)
 {
  Log.v("applog", e.getMessage());
 }
 return result;
}

Вот фрагмент кодаосновной метод.Здесь вы можете видеть, что я вызываю функцию getRestaurants (), показанную выше.Я озадачен тем, почему данные не сортируются.

Любой совет с благодарностью.Заранее спасибо.

public class Assignment2 extends ListActivity {

 // Set up some global variables. 
 private static final int ADD_NEW_ID = Menu.FIRST;
 private static final int CLOSE_APP_ID = ADD_NEW_ID+1;
 private final DBAdapter db = new DBAdapter(this);
 private static CursorAdapter curAdapter = null;
 private static Cursor rawData = null;
 @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        db.open(); // Open connection to restaurant db.

     rawData = db.getRestaurants();
     Log.v("applog", rawData.getCount()+" Restaurants loaded from DB.");

     if(rawData.getCount() == 0)
     {
      Toast.makeText(getApplicationContext(), "No restaurants found.", Toast.LENGTH_SHORT).show();
     }
     try
     {
      /* The following two arrays are used to map DB fields to ListView items
       * From a custom layout file.
       */
      // Array of db fields to be used when converting cursor to ListView
            String[] strFields = { "name", BaseColumns._ID };
            // Array of listview id's to be used when populating the ListView
            int[] intFields = { R.id.first };

            curAdapter = new SimpleCursorAdapter(this, R.layout.row, rawData, strFields, intFields);
     }
     catch (Exception e)
     { 
      Log.v("applog", e.getMessage()); 
     }  

     // Apply the converter cursor to the current ListView
     setListAdapter(curAdapter);
        db.close(); // Close connection to restaurant db.

1 Ответ

0 голосов
/ 31 октября 2010

Я точно не знаю, в чем ваша проблема, но все выглядит хорошо, за исключением тех строк кода, которые есть у меня, когда я получаю обратный вызов из моей новой вставки данных

        if(cursor!=null)cursor.requery();
        adapter.notifyDataSetChanged();

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...