gpt4 book ai didi

android - 为什么查询被调用两次?

转载 作者:行者123 更新时间:2023-11-29 20:59:24 25 4
gpt4 key购买 nike

你好我正在使用这个代码

    Cursor mCursor = this.getContentResolver().query(PlayerContentProviderDB.CONTENT_URI, PLAYERS_PROJECTION, null, null, Players.SCORE + " ASC" + " LIMIT 2");
this.adapter = new SimpleCursorAdapter(this, R.layout.high_score, mCursor, dataColumns, viewIDs, 0);
setListAdapter(adapter);

_

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// System.out.println(sortOrder);
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
checkColumns(projection);
queryBuilder.setTables(PlayerContract.Players.PLAYERS_TABLE_NAME);
int uriType = sURIMatcher.match(uri);

switch (uriType) {
case ALL_SCORES:
break;
case SCORE_ID:
queryBuilder.appendWhere(PlayerContract.Players.ID + "=" + uri.getLastPathSegment());
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}

SQLiteDatabase db = this.dbHelper.getReadableDatabase();
Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
System.out.println(uri.toString() + " " + projection[0] + " " + projection[1] + " " + projection[2] + " " + projection[3] + " " + selection + " " + sortOrder);
// Notify potential listeners
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}

尝试对数据库的返回进行排序和限制,但它不起作用。通过插入诊断打印语句,我注意到在调用上述代码后立即调用了我的内容提供程序的查询方法。我认为这可能与我错误的根源有关。所以我的问题是为什么我的查询方法被调用了两次?

更新

我现在知道我的错误是由查询被调用两次引起的。在第一次调用时,我按字符串排序的顺序是正确的,但在第二次调用时它为空,这使得我的列表未排序且不受限制。

链接到新 Activity 的我的 ListView

    setListAdapter(new ArrayAdapter<String>(this, R.layout.puzzle_selector, options));

ListView list = this.getListView();
list.setTextFilterEnabled(true);
list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!((TextView) view).getText().toString().equalsIgnoreCase("HighScore")) {
String selectionString[] = ((TextView) view).getText().toString().split(" ");
String puzzleNumber = selectionString[1];
System.out.println("puzzleNumber is " + puzzleNumber);

SharedPreferences prefs = getSharedPreferences(getString(R.string.currentSave), MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("selectedNumber", puzzleNumber);
editor.commit();

Intent passPuzzleNumberIntent = new Intent(PuzzleSelector.this, MainActivity.class);
passPuzzleNumberIntent.putExtra("puzzleNumber", puzzleNumber);
startActivity(passPuzzleNumberIntent);
} else {
Intent lookAtScoresIntent = new Intent(PuzzleSelector.this, HighScores.class);
startActivity(lookAtScoresIntent);
}
}
});

最佳答案

由于 ListView 布局了两次,一次没有高度,一次是在设置高度后(在 Android 中很常见),getView 在与适配器关联的列表上被调用了两次。为确保您不会在 ListView 中多次布局各个 View ,请检查 View 是否为 null,如果为 null,则在 getView 方法中按如下所示进行布局:

public View getView(int position, View convertView, ViewGroup parent) {
super.getView(position, convertView, parent);

if (convertView == null) {
// do custom layout of view with data from cursor
}

return convertView;
}

关于android - 为什么查询被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26616900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com