Android IllegalStateException游标错误

Android IllegalStateException游标错误,android,sql,exception,cursor,Android,Sql,Exception,Cursor,很抱歉重复这个问题。但我试图让很多方法都不起作用 在应用中,在第一轮中,它可以推进活动。但当时这是一个错误 SQLiteDatabase mDb; Database3 mHelper; SQLiteDatabase mDb2; Database mHelper2; private Cursor mCursor; private String name; private String image; private String location; private String i

很抱歉重复这个问题。但我试图让很多方法都不起作用 在应用中,在第一轮中,它可以推进活动。但当时这是一个错误

SQLiteDatabase mDb;  
Database3 mHelper;  
SQLiteDatabase mDb2;  
Database mHelper2; 

private Cursor mCursor; 
private String name;
private String image;
private String location;
private String info;
private String shop;
private String mcontact;

mHelper2 = new Database(this,shop);  
    mDb2 = mHelper2.getWritableDatabase();  
    mHelper2.onUpgrade(mDb2, 1, 1); 

    if (info.equalsIgnoreCase("null")){
        AlertDialog.Builder builder = new AlertDialog.Builder(Activity_Mall_Floor.this);
        builder.setTitle("Floor Description");
        builder.setMessage("No Floor information of "+name);
        builder.setNeutralButton("OK", null);
        builder.show();

    }
    else {
        ListView listView1 = (ListView)findViewById(R.id.listView2);  
            mHelper = new Database3(this,info);  
            mDb = mHelper.getWritableDatabase();  
            mHelper.onUpgrade(mDb, 1, 1);  

            mCursor = mDb.rawQuery("SELECT " + Database3.COL_FLOOR + ", "   
                    + Database3.COL_IMAGE+ " FROM " + Database3.TABLE_NAME, null);  

            ArrayList<String> dirArray = new ArrayList<String>();  
            mCursor.moveToFirst();  

            while ( !mCursor.isAfterLast() ){  
                dirArray.add(mCursor.getString
                        (mCursor.getColumnIndex(Database3.COL_FLOOR)));   
                mCursor.moveToNext();      
            }  

            ArrayAdapter<String> adapterDir = 
                    new ArrayAdapter<String>(getApplicationContext()   
                    , android.R.layout.simple_list_item_1, dirArray);  
            listView1.setAdapter(adapterDir);
            listView1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                mCursor.moveToPosition(arg2);

                String floorName = mCursor.getString(mCursor.getColumnIndex(Database3.COL_FLOOR));
                String mapFloor = mCursor.getString(mCursor.getColumnIndex(Database3.COL_IMAGE));

                String floor = "";
                if(floorName.equalsIgnoreCase("1st Floor"))
                    floor = "1";
                else if (floorName.equalsIgnoreCase("2nd Floor"))
                    floor = "2";
                else if (floorName.equalsIgnoreCase("3rd Floor"))
                    floor = "3";
                else
                    floor = "4";


                mCursor = mDb2.rawQuery("SELECT DISTINCT " + Database.COL_NAME 
                        +" FROM " + Database.TABLE_NAME 
                        +" WHERE " + Database.COL_FLOOR + " = '" + floor +"' ", null);

                ArrayList<String> dirArray = new ArrayList<String>();  
                mCursor.moveToFirst();
                while ( !mCursor.isAfterLast() ){  
                    dirArray.add(mCursor.getString
                            (mCursor.getColumnIndex(Database.COL_NAME)));   
                    mCursor.moveToNext();      
                }

                Intent intent = new Intent(getApplicationContext(), Activity_Mall_FMap.class);
                    Bundle bundle = new Bundle();
                    bundle.putString("Floorname", floorName);
                    bundle.putString("Mapfloor", mapFloor);
                    bundle.putString("Shop", shop);
                    intent.putExtra("FloorList",dirArray);
                    intent.putExtras(bundle);
                    startActivity(intent);
                }
            });
    }
这是错误行85

String floorName = mCursor.getString(mCursor.getColumnIndex(Database3.COL_FLOOR));
String mapFloor = mCursor.getString(mCursor.getColumnIndex(Database3.COL_IMAGE));

感谢您的指导。

检查

if (!mCursor.moveToFirst()) {
   Log.e(TAG, "Couldn't move to first");
   // do something here if move failed 
}
您现在将忽略它并告诉您移动是否成功。

修复:

  • 在从中读取数据之前,请尝试通过moveToFirst定位光标

  • 在if(c.moveToFirst()){}之后关闭光标

  • 检查null.e,g;如果(c!=null&&c.moveToFirst()){}

  • 检查计数;(c!=null&&c.getCount()>0&&c.moveToFirst()){}


  • 我想知道答案,但我不明白。当我单击“列出第一轮中为什么通过此活动”以及当我再次返回此活动时,我不会尝试,但不会工作。它不显示消息“无法移动到第一个”,与mCursor.moveToPosition(arg2)和任何其他用法相同
    public void onPause(){if(shop.equalsIgnoreCase(“null”){super.onPause();}else{super.onPause();mHelper.close();mDb.close();mHelper2.close();mDb2.close();}
    它与onPause有关??因为我关闭了所有数据库。
    if (!mCursor.moveToFirst()) {
       Log.e(TAG, "Couldn't move to first");
       // do something here if move failed 
    }