Android 如果sqlite记录超过5,则应用程序强制关闭

Android 如果sqlite记录超过5,则应用程序强制关闭,android,sqlite,Android,Sqlite,我正在开发一个building directory应用程序,当执行地址反向查找时,代码对于前5条记录可以正常工作,但会因错误而崩溃 'android.database.CursorIndexOutOfBoundsException:请求索引0, 大小为0' 我已经记录了记录的数量和列索引。表中的前5条记录生成预期结果,但是,如果超出索引计数,则会崩溃 以下是活动的代码: public class AddressReverse extends Activity implements TextWat

我正在开发一个building directory应用程序,当执行地址反向查找时,代码对于前5条记录可以正常工作,但会因错误而崩溃

'android.database.CursorIndexOutOfBoundsException:请求索引0, 大小为0'

我已经记录了记录的数量和列索引。表中的前5条记录生成预期结果,但是,如果超出索引计数,则会崩溃

以下是活动的代码:

public class AddressReverse extends Activity implements TextWatcher 
{
AutoCompleteTextView actv;
String address[];
private ArrayList<String> results = new ArrayList<String>();
private SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.address_reverse);

    DatabaseHelper helper = new DatabaseHelper(this.getApplicationContext());
    db = helper.getWritableDatabase();
    Cursor c = db.rawQuery("SELECT address FROM buildings", null);

    if (c!=null)
    {
        if (c.moveToFirst())
        {
            do
            {
                String address = c.getString(c.getColumnIndex("address"));
                results.add(address);
                Log.d("Cursor count", c.getCount()+"");
                Log.d("Cursor Index", c.getColumnIndex("address")+"");
            }
            while (c.moveToNext());
        }
        c.close();
    }

    actv = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
    actv.addTextChangedListener(this);
    actv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, results));

    actv.setOnItemClickListener(new OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // TODO Auto-generated method stub
            String address = ((TextView)view).getText().toString();
            Intent i =new Intent(getApplicationContext(), BuildingDetails.class);
            i.putExtra("building", address);
            startActivity(i);
        }

    });

}

@Override
public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub

}}

我认为问题在于你关闭了光标! 尝试通过添加

startManagingCursor(c);

到您的
onCreate()
方法。

从您发布的异常来看,它看起来不像,它适用于前5项。例外情况很明显,游标有0项,尽管查看代码时,此错误不应该出现,因为所有错误检查都已完成。所以一定要发布整个异常stackok在做了一些挖掘之后,我发现了问题所在。输入地址时,建筑物的地址是建筑物的名称,BuildingDetails活动sql语句在名称列而不是地址列中进行迭代。我用相同的代码做了一个新的活动(除了迭代地址列),一切都很好。谢谢你的帮助。
startManagingCursor(c);