Shw*_*eta 54 android onitemclicklistener android-sqlite
我正在创建任务管理器.我有任务列表,我希望当我点击特定的任务列表名称时,如果它为空,那么它继续添加任务活动,但如果它有2或3个任务,那么它会以列表形式向我显示这些任务.
我想在列表中计算.我的数据库查询如下:
public Cursor getTaskCount(long tasklist_Id) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor= db.rawQuery("SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?",
new String[] { String.valueOf(tasklist_Id) });
if(cursor!=null && cursor.getCount()!=0)
cursor.moveToNext();
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
在我的活动中:
list_tasklistname.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0,
android.view.View v, int position, long id) {
db = new TodoTask_Database(getApplicationContext());
Cursor c = db.getTaskCount(id);
System.out.println(c.getCount());
if(c.getCount()>0) {
System.out.println(c);
Intent taskListID = new Intent(getApplicationContext(), AddTask_List.class);
task = adapter.getItem(position);
int taskList_id = task.getTaskListId();
taskListID.putExtra("TaskList_ID", taskList_id);
startActivity(taskListID);
}
else {
Intent addTask = new Intent(getApplicationContext(), Add_Task.class);
startActivity(addTask);
}
}
});
db.close();
}
Run Code Online (Sandbox Code Playgroud)
但当我点击任务列表名称时,它返回1,机器人数量的任务.
小智 141
使用DatabaseUtils.queryNumEntries():
public long getProfilesCount() {
SQLiteDatabase db = this.getReadableDatabase();
long count = DatabaseUtils.queryNumEntries(db, TABLE_NAME);
db.close();
return count;
}
Run Code Online (Sandbox Code Playgroud)
或者(效率更低)
public int getProfilesCount() {
String countQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int count = cursor.getCount();
cursor.close();
return count;
}
Run Code Online (Sandbox Code Playgroud)
在活动中:
int profile_counts = db.getProfilesCount();
db.close();
Run Code Online (Sandbox Code Playgroud)
May*_*ani 45
使用android.database.DatabaseUtils获取计数.
public long getTaskCount(long tasklist_Id) {
return DatabaseUtils.queryNumEntries(readableDatabase, TABLE_NAME);
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的实用程序,它有多个包装器方法来实现数据库操作.
Ung*_*viu 30
c.getCount()返回,1因为游标包含单行(具有真实的行COUNT(*)).您需要的计数是int游标中第一行的值.
public int getTaskCount(long tasklist_Id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor= db.rawQuery(
"SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?",
new String[] { String.valueOf(tasklist_Id) }
);
int count = 0;
if(null != cursor)
if(cursor.getCount() > 0){
cursor.moveToFirst();
count = cursor.getInt(0);
}
cursor.close();
}
db.close();
return count;
}
Run Code Online (Sandbox Code Playgroud)
我知道很久以前就已经回答了,但我也想分享一下:
这段代码非常有效:
SQLiteDatabase db = this.getReadableDatabase();
long taskCount = DatabaseUtils.queryNumEntries(db, TABLE_TODOTASK);
Run Code Online (Sandbox Code Playgroud)
但是,如果我不想计算所有行,我有条件申请怎么办?
DatabaseUtils还有另一个功能: DatabaseUtils.longForQuery
long taskCount = DatabaseUtils.longForQuery(db, "SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?",
new String[] { String.valueOf(tasklist_Id) });
Run Code Online (Sandbox Code Playgroud)
该longForQuery文件说:
用于在db上运行查询并返回第一行第一列中的值的实用方法.
public static long longForQuery(SQLiteDatabase db, String query, String[] selectionArgs)
Run Code Online (Sandbox Code Playgroud)
它性能友好,节省您的时间和样板代码
希望这有一天会帮助某人:)
将您的 getTaskCount 方法更改为:
public int getTaskCount(long tasklist_id){
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor= db.rawQuery("SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?", new String[] { String.valueOf(tasklist_id) });
cursor.moveToFirst();
int count= cursor.getInt(0);
cursor.close();
return count;
}
Run Code Online (Sandbox Code Playgroud)
然后,相应地更新点击处理程序:
public void onItemClick(AdapterView<?> arg0, android.view.View v, int position, long id) {
db = new TodoTask_Database(getApplicationContext());
// Get task list id
int tasklistid = adapter.getItem(position).getTaskListId();
if(db.getTaskCount(tasklistid) > 0) {
System.out.println(c);
Intent taskListID = new Intent(getApplicationContext(), AddTask_List.class);
taskListID.putExtra("TaskList_ID", tasklistid);
startActivity(taskListID);
} else {
Intent addTask = new Intent(getApplicationContext(), Add_Task.class);
startActivity(addTask);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112245 次 |
| 最近记录: |