Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么要调用两次查询?_Android_Sqlite_Sorting_Simplecursoradapter_Android Cursor - Fatal编程技术网

Android 为什么要调用两次查询?

Android 为什么要调用两次查询?,android,sqlite,sorting,simplecursoradapter,android-cursor,Android,Sqlite,Sorting,Simplecursoradapter,Android Cursor,你好,我正在使用这个代码 Cursor mCursor = this.getContentResolver().query(PlayerContentProviderDB.CONTENT_URI, PLAYERS_PROJECTION, null, null, Players.SCORE + " ASC" + " LIMIT 2"); this.adapter = new SimpleCursorAdapter(this, R.layout

你好,我正在使用这个代码

    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);
_

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

更新

现在我知道了一个事实,我的错误是由两次调用查询引起的。在第一次调用中,我的order by string是正确的,但在第二次调用中,它是null,这使得我的列表未排序且不受限制

链接到新活动的我的列表视图

    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);
            }
        }
    });
setListAdapter(新的ArrayAdapter(这个,R.layout.puzzle_选择器,选项));
ListView list=this.getListView();
list.setTextFilterEnabled(true);
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
if(!((TextView)view.getText().toString().equalsIgnoreCase(“高分”)){
字符串选择字符串[]=((TextView)视图).getText().toString().split(“”);
字符串puzzleNumber=selectionString[1];
System.out.println(“拼图编号为”+拼图编号);
SharedReferences prefs=GetSharedReferences(getString(R.string.currentSave),模式为私有);
SharedReferences.Editor=prefs.edit();
编辑器.putString(“selectedNumber”,拼图编号);
commit();
Intent passPuzzleNumberIntent=新的Intent(puzzselector.this,MainActivity.class);
passPuzzleNumberIntent.putExtra(“拼图编号”,拼图编号);
startActivity(PaspuzzleNumberIntent);
}否则{
Intent lookAtScoresIntent=新意图(PuzzleSelector.this,HighScores.class);
StartTactivity(LookatScoresInt);
}
}
});

由于列表视图有两次布局,一次没有高度,一次在设置高度后(在Android中很常见),因此在与适配器相关联的列表上会调用两次getView。要确保不会在列表视图中多次布局单个视图,请检查该视图是否为空,如果为空,然后在方法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;
}

正在调用的方法在活动中的何处?如果它在列表视图中,则很可能被调用两次。在活动的onCreate中调用了第一位代码。虽然该活动是由用户从另一个活动的listView中选择来启动的。您能将getView方法粘贴到列表适配器中吗?我相信我以前不理解您所说的“我的getView”是什么意思。我的两个活动中都没有getView。此外,它们都扩展了listActivity,它确实有一个super.getView()。然而,听起来你很可能是正确的,为什么会发生这种情况。那么,有没有其他方法可以在不重写该方法的情况下修复此问题?我将扩展SimpleCursorAdapter并重写该方法上的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;
}