2010-10-31 50 views
0

我写了一个小型的android应用程序,它捕获一些数据并将其显示在一个ListView中。Android SQL查询不是订购数据

我想让列表按升序排列(无概率)。但是,当我添加一个新的项目时,即使重新加载视图/应用程序,它仍然在列表的底部。看来唯一被排序的数据是在数据库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. 

回答

0

林不知道究竟你的问题是什么,但是,这一切看起来不错减去几行代码我有,当我从我的新数据的回调插入

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

希望这将解决您的问题。

+0

谢谢,但该代码不能解决它。 当餐厅名称以大写字母开头时,程序正常工作。然后它是排序数据的一部分。 但是,如果名称以小写字母开头,那么它不是排序的一部分,只是停留在列表的底部.. **令人困惑的** – conor 2010-10-31 22:16:33

+0

我猜它按ASCII值对数字进行排序 – schwiz 2010-11-01 18:44:01

+0

其中是添加/删除项目的代码?你是否将它提交给数据库,或只是将它从适配器中移除> – Jim 2010-11-01 21:23:11