Причина, по которой вы выводите индекс за границы, заключается в том, что вы пытаетесь прочитать данные с позиции, которая ДО ПЕРВОЙ СТРОКИ т.е. -1. Вы должны переместить в строку, чтобы прочитать данные из строки.
Таким образом, перед строкой String check=res.getString(2);
вам нужно перейти к строке, вероятно, используя метод Cursor's moveToFirst (хотя согласно сообщению возвращаются 2 строки, что является проблемой, которую вы, вероятно, захотите для адресации, как может показаться, что есть две строки для одного пользователя и, возможно, 2 разных пароля).
Поскольку метод moveToFirst возвращает логическое значение, true , если перемещение может быть выполнено, иначе false, тогда нет необходимости проверять, есть ли строки, как будто тогда нет moveToFirst вернет false.
Хотя, вероятно, в настоящее время это не проблема. Вы также должны всегда закрывать Курсор, когда закончите с ним.
Таким образом, вы можете попробовать использовать: -
public void checkData(){
final DBAssetHelper mydb;
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String user_name=usname.getText().toString();
Cursor res =mydb.getData(user_name);
if (res.moveToFirst()) { //<<<<<<<<<< try to move to a row
Toast.makeText(MainActivity.this,"Login failed", Toast.LENGTH_SHORT);
} else {
if (res.getString(2).equals(pass.getText().toString)) {
Toast.makeText(MainActivity.this,"You are Loged IN",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this,"You are Not Loged IN",Toast.LENGTH_SHORT).show();
}
}
res.close(); //<<<<<<<<<< Close the Cursor
}
});
}