2013-09-11 5 views
0

Я использую следующую функцию, которая использует логическое значение.Булева функция не возвращает правильное значение

int recFound=0; 
     public Boolean CheckUser(String uName,String password) 
     { 
      try 
      { 
       statement=conn.createStatement(); 


       resultSet=statement.executeQuery("select count(*) from UserMaster where username LIKE'"+uName+"' and password LIKE'"+password+"'"); 

        if(resultSet.getRow()>0) 
        { 
         recFound=1; 
        } 
        else 
        { 
         recFound=0; 
        } 



      } 
      catch (Exception e) { 
       e.printStackTrace(); 
       recFound=0; 
      } 
      if(recFound == 0) 
      { 
      return false; 
      } 
      else 
      { 
       return true; 
      } 
} 

Я вызываю эту функцию через:

boolean isValidUser=con.CheckUser(etLoginID.getText().toString(), etPassword.getText().toString()); 
       if(isValidUser) 
       { 
        Intent i= new Intent(getApplicationContext(),Messages.class); 
        startActivity(i); 
       } 

Когда я передать эту функцию собственных значения ее не делают recFound=1;

И в последнем состоянии, хотя recFound == 0 она входит в другом условии и возвращает true.

Но при присвоении этому значению возвращаемым значениям функции вызывающего абонента присваивается значение false.

Значит, boolean isValidUser=con.CheckUser(etLoginID.getText().toString(), etPassword.getText().toString()); будет ложным.

isValidUser should get true in such case. 

Пожалуйста, помогите мне.

+0

resultSet - это курсор ...... ?? – Piyush

ответ

1

Hi Shrimant Баджи Рао Peshawe - I,
изменить заявление " if (resultSet.getRow()> 0) "to" if (resultSet. Next()) ", тогда попробуйте.
Ссылка: Refer

+0

Функция getRow() возвращает 0 каждый раз, в то время как запись существует. Он должен вернуть мне 1 (чтобы удовлетворить> 0 условие –

1

вы вызываете булеву функцию в методе проверки пользователей, так его возвращает истинное или ложное значение ..

Джо просто возвращает истинное значения в этой функции.

вы также можете проверить его:

if(isValidUser==true) 
      { 
       Intent i= new Intent(getApplicationContext(),Messages.class); 
       startActivity(i); 
      } 

и напечатать значение isValidUser в журнале, что какое значение он получает

+0

, возвращая его, возвращает true, но при ловле он принимает false –

+0

в отладчике, когда я видел его false –

1

Try Follwing код ...

int recFound = 0; 
public boolean CheckUser(String uName, String password) { 
    try { 
     statement = conn.createStatement(); 
     resultSet = statement.executeQuery("select count(*) from UserMaster where username LIKE '" + uName + "' and password LIKE '" + password + "'"); 
     if (resultSet.getRow() > 0) { 
      recFound = 1; 
     } else { 
      recFound = 0; 
     } 
     if (recFound > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

и

if(con.CheckUser(etLoginID.getText().toString(), etPassword.getText().toString())) { 
    Intent i= new Intent(getApplicationContext(),Messages.class); 
    startActivity(i); 
} 
+0

Функция getRow() возвращает 0 каждый раз, в то время как запись существует. Она должна вернуть мне 1 (чтобы удовлетворить> 0 условие –

+0

имеет ли ваша база данных значение .. ??? @ ShrimantBajiraoPeshawe-I – SilentKiller

+0

Да, моя база данных имеет значение –

1

Try инициализировать isValidUser ложь в начале

также регистрируем значение resultSet.getRow() и recFound перед тем, как вернуть его вызывающему.

вы также можете попробовать использовать cusrsor как ниже

int recFound=0; 
private SQLiteDatabase mDb; 
     public Boolean CheckUser(String uName,String password) 
     { 
      try 
      { 

       String sql="select count(*) from UserMaster where username LIKE'"+uName+"' and password LIKE'"+password+"'"; 
       Log.i(TAG,"Executing Query : "+sql); 
       mCur = mDb.rawQuery(sql, null); 
       Log.i(TAG,"Query Executed Successfully"); 
       if(mCur!=null) 
       { 
         recFound=1; 
        } 
        else 
        { 
         recFound=0; 
        } 



      } 
      catch (Exception e) { 
       e.printStackTrace(); 
       recFound=0; 
      } 

      if(recFound == 0) 
      { 
      return false; 
      } 
      else 
      { 
       return true; 
      } 
} 
+0

Функция getRow() возвращает 0 каждый раз, в то время как запись существует. Она должна возвращать мне 1 (для удовлетворения> 0 условие –

1

Заменить код

if(resultSet.getRow()>0){ 
     recFound=1; 
    } else { 
     recFound=0; 
    } 

к

if(resultSet.next()){ 
     return true; 
    } else { 
    return false; 
    } 
+0

Функция getRow() возвращает 0 каждый раз, он должен вернуть мне 1 (чтобы удовлетворить> 0 условие –

+0

Я забыл упомянуть одну вещь в моем отредактированном ответе –

1

изменения:

   if(resultSet.getRow()>0) 
       { 
        recFound=1; 
       } 
       else 
       { 
        recFound=0; 
       } 

к:

   if(resultSet.getRow()>0) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 

Удалить условие проверки recFound в catch()

Это должно решить вашу проблему.

+0

Функция getRow() возвращает каждый раз каждый раз, когда запись существует. Он должен вернуть мне 1 (для удовлетворения> 0 Условие –

+0

Используйте 'resultSet.moveToNext()'. Я предполагаю, что resultSet является курсором –

Смежные вопросы