Android SQL查询没有订购数据

时间:2010-10-31 18:45:52

标签: android sqlite

我编写了一个小型Android应用程序,可以抓取一些数据并将其显示在ListView中。

我希望列表按升序排序(无概率)。但是当我添加新项目时,即使重新加载视图/应用程序,它也会保留在列表的底部。似乎唯一正在排序的数据是在数据库OnCreate()方法中创建的条目。

我不确定要提供什么代码,但我首先会向您展示DBAdapter类的片段,然后从主app类中显示。

数据库构建查询:

    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 :(得分:0)

我不确定你的问题是什么,但是,当我从新的数据插页中获得回调时,这一切看起来都很好,减去了我的代码行

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

希望这可以解决您的问题。