Android CursorIndexOutOfBoundsException无法解析

Android CursorIndexOutOfBoundsException无法解析,android,android-cursor,Android,Android Cursor,我将光标索引设置为超出范围“请求索引0:大小为0”。它只是一个用户注册和登录应用程序。当没有用户名和密码匹配的用户时,我的应用程序将崩溃 代码如下: MainActivity.java final SUSQLiteHelper dbhelper = new SUSQLiteHelper(this); LoginData login = dbhelper.readOneUser(loginuname.getText().toString(), loginpwd.getText().toStrin

我将光标索引设置为超出范围“请求索引0:大小为0”。它只是一个用户注册和登录应用程序。当没有用户名和密码匹配的用户时,我的应用程序将崩溃

代码如下:

MainActivity.java

final SUSQLiteHelper dbhelper = new SUSQLiteHelper(this);

LoginData login = dbhelper.readOneUser(loginuname.getText().toString(), loginpwd.getText().toString());

                if(login.getUname().toString().equals(loginuname.getText().toString()) && 
                        login.getPwd().toString().equals(loginpwd.getText().toString()))
                {
                    Toast.makeText(getApplicationContext(), "Login Successfull. Welcome " + login.getUname().toUpperCase() +" !".toString(), 
                            Toast.LENGTH_LONG).show();
                }
                else if(login.getUname().toString().equals(loginuname.getText().toString()) && 
                            !login.getPwd().toString().equals(loginpwd.getText().toString()))
                {                       
                    Toast.makeText(getApplicationContext(), "Login Failed. Incorrect password !", 
                            Toast.LENGTH_LONG).show();                      
                }
                else
                    Toast.makeText(getApplicationContext(), "Login Failed. User doesn't exist !", 
                            Toast.LENGTH_LONG).show(); //it never goes here if no username is found in the table
    public LoginData readOneUser(String uname, String pwd)
{
    SQLiteDatabase loginUserDB = this.getReadableDatabase();
    LoginData newLogin = null;
    Cursor cursor = loginUserDB.query(TABLE_NAME, new String[]{TABLE_ROW_UNAME, TABLE_ROW_EMAIL, TABLE_ROW_PWD}, TABLE_ROW_UNAME + "=?",
            new String[]{String.valueOf(uname)}, null, null, null);

    if(cursor.moveToFirst())
    {
        newLogin = new LoginData(cursor.getString(0), cursor.getString(1), cursor.getString(2));
    }
    cursor.close();
    loginUserDB.close();
    return newLogin;
}
SUSQLiteHelper.java

final SUSQLiteHelper dbhelper = new SUSQLiteHelper(this);

LoginData login = dbhelper.readOneUser(loginuname.getText().toString(), loginpwd.getText().toString());

                if(login.getUname().toString().equals(loginuname.getText().toString()) && 
                        login.getPwd().toString().equals(loginpwd.getText().toString()))
                {
                    Toast.makeText(getApplicationContext(), "Login Successfull. Welcome " + login.getUname().toUpperCase() +" !".toString(), 
                            Toast.LENGTH_LONG).show();
                }
                else if(login.getUname().toString().equals(loginuname.getText().toString()) && 
                            !login.getPwd().toString().equals(loginpwd.getText().toString()))
                {                       
                    Toast.makeText(getApplicationContext(), "Login Failed. Incorrect password !", 
                            Toast.LENGTH_LONG).show();                      
                }
                else
                    Toast.makeText(getApplicationContext(), "Login Failed. User doesn't exist !", 
                            Toast.LENGTH_LONG).show(); //it never goes here if no username is found in the table
    public LoginData readOneUser(String uname, String pwd)
{
    SQLiteDatabase loginUserDB = this.getReadableDatabase();
    LoginData newLogin = null;
    Cursor cursor = loginUserDB.query(TABLE_NAME, new String[]{TABLE_ROW_UNAME, TABLE_ROW_EMAIL, TABLE_ROW_PWD}, TABLE_ROW_UNAME + "=?",
            new String[]{String.valueOf(uname)}, null, null, null);

    if(cursor.moveToFirst())
    {
        newLogin = new LoginData(cursor.getString(0), cursor.getString(1), cursor.getString(2));
    }
    cursor.close();
    loginUserDB.close();
    return newLogin;
}
loginda.java

final SUSQLiteHelper dbhelper = new SUSQLiteHelper(this);

LoginData login = dbhelper.readOneUser(loginuname.getText().toString(), loginpwd.getText().toString());

                if(login.getUname().toString().equals(loginuname.getText().toString()) && 
                        login.getPwd().toString().equals(loginpwd.getText().toString()))
                {
                    Toast.makeText(getApplicationContext(), "Login Successfull. Welcome " + login.getUname().toUpperCase() +" !".toString(), 
                            Toast.LENGTH_LONG).show();
                }
                else if(login.getUname().toString().equals(loginuname.getText().toString()) && 
                            !login.getPwd().toString().equals(loginpwd.getText().toString()))
                {                       
                    Toast.makeText(getApplicationContext(), "Login Failed. Incorrect password !", 
                            Toast.LENGTH_LONG).show();                      
                }
                else
                    Toast.makeText(getApplicationContext(), "Login Failed. User doesn't exist !", 
                            Toast.LENGTH_LONG).show(); //it never goes here if no username is found in the table
    public LoginData readOneUser(String uname, String pwd)
{
    SQLiteDatabase loginUserDB = this.getReadableDatabase();
    LoginData newLogin = null;
    Cursor cursor = loginUserDB.query(TABLE_NAME, new String[]{TABLE_ROW_UNAME, TABLE_ROW_EMAIL, TABLE_ROW_PWD}, TABLE_ROW_UNAME + "=?",
            new String[]{String.valueOf(uname)}, null, null, null);

    if(cursor.moveToFirst())
    {
        newLogin = new LoginData(cursor.getString(0), cursor.getString(1), cursor.getString(2));
    }
    cursor.close();
    loginUserDB.close();
    return newLogin;
}
此类具有Uname、Pwd、Email字段的getter和setter方法,以及将这些字段作为参数的构造函数。

在函数readOneUser()中,检查:


CursorIndexOutOfBoundsException:请求索引0,大小为0

这意味着
cursor.moveToFirst()返回false
,并且
光标为空。因此,请尝试添加代码段来检查游标是否为null,这取决于修改逻辑的方式

public LoginData readOneUser(String uname, String pwd)
{
 SQLiteDatabase loginUserDB = this.getReadableDatabase();
 LoginData newLogin = null;
 Cursor cursor = loginUserDB.query(TABLE_NAME, new String[]{TABLE_ROW_UNAME, TABLE_ROW_EMAIL,TABLE_ROW_PWD}, TABLE_ROW_UNAME + "=?",new String[]{String.valueOf(uname)}, null, null, null);

  if(cursor!=null) //Check whether cursor is null or not
  {
   if(cursor.moveToFirst())
   {
     newLogin = new LoginData(cursor.getString(0), cursor.getString(1), cursor.getString(2));
   }
  }
cursor.close();
loginUserDB.close();
return newLogin;
 }


@这是我的日志。。。01-09 19:12:16.440:E/AndroidRuntime(308):android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0