Мое приложение выбрасывает исключение указателя индекса outOfBounds, запрошенное -1 с размером 1 - PullRequest
0 голосов
/ 25 декабря 2018

Когда я пытаюсь получить BLOB-объект из моей базы данных sqlite, курсор выдает исключение index outofbounds.

Мой класс DataBaseHelper:

public class DataBaseHelper extends SQLiteOpenHelper {
    public static final String Database_Name="images.db";
    public static final String Table_Name="imgs";
    Bitmap bitmap;
    public DataBaseHelper(Context context) {
        super(context, Database_Name,null,1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table "+Table_Name+"(id integer primary key autoincrement , image blob)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        db.execSQL("drop table if esists "+Table_Name);
    }
    public boolean insert(byte[] img)
    {

        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues cv=new ContentValues();
        cv.put("image",img);
        long insert=db.insert(Table_Name,null,cv);
        if(insert==-1)
        {
            return  false;
        }
        else
        {
            return true;
        }
    }

И мой класс Results:

public class Results extends AppCompatActivity {
    ImageView imageView;
    DataBaseHelper mDataBaseHelper;
    Bitmap img;
    Bitmap bitmap;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);
        textView=(TextView)findViewById(R.id.textView3);
        mDataBaseHelper=new DataBaseHelper(this);
        SQLiteDatabase db=mDataBaseHelper.getReadableDatabase();
        Toast.makeText(getApplicationContext(),"Emm",Toast.LENGTH_LONG).show();
        Cursor cursor=db.rawQuery("select* from "+mDataBaseHelper.Table_Name,null);
        byte[] imageArray=cursor.getBlob(3);
        bitmap=BitmapFactory.decodeByteArray(imageArray,0,imageArray.length);
        imageView.setImageBitmap(bitmap);
    }
}

Приведенный выше код результата выдает cursor index outofbounds exception,index -1 requested with size of 1.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

if (cursor.moveToNext()){ cursor.getBlob(cursor.getColumnIndexOrThrow(yourColumnName)); }

Таким образом, вы перемещаете курсор на первую строку вашего возвращенного набора данных.В любом случае, кажется, что пробел в вашем утверждении select отсутствует.

0 голосов
/ 25 декабря 2018

Таблица mDataBaseHelper.Table_Name, из которой вы хотите получить строки,выполнив этот оператор:

"select * from " + mDataBaseHelper.Table_Name

имеет только 1 столбец, но вы пытаетесь получить 4-й по:

byte[] imageArray=cursor.getBlob(3);

Инструкция CREATE в классе SQLiteOpenHelper показывает, чтов таблице 2 столбца: id и image, поэтому вы должны выполнить:

if (cursor.moveToFirst()) {
    byte[] imageArray=cursor.getBlob(1);
}
cursor.close();

попробовать, но если вы снова получите ту же ошибку, это означает, что таблица, существующая вБД имеет только 1 столбец.Поэтому, если проблема не устранена, удалите приложение с эмулятора / устройства, чтобы база данных была удалена и снова запущена для воссоздания таблицы.Затем снова заполните таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...