Android SQL查询不是订购数据
问题描述:
我写了一个小型的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.
答
林不知道究竟你的问题是什么,但是,这一切看起来不错减去几行代码我有,当我从我的新数据的回调插入
if(cursor!=null)cursor.requery();
adapter.notifyDataSetChanged();
希望这将解决您的问题。
谢谢,但该代码不能解决它。 当餐厅名称以大写字母开头时,程序正常工作。然后它是排序数据的一部分。 但是,如果名称以小写字母开头,那么它不是排序的一部分,只是停留在列表的底部.. **令人困惑的** – conor 2010-10-31 22:16:33
我猜它按ASCII值对数字进行排序 – schwiz 2010-11-01 18:44:01
其中是添加/删除项目的代码?你是否将它提交给数据库,或只是将它从适配器中移除> – Jim 2010-11-01 21:23:11