2014-10-15 3 views
0

Я создал проект приложения Android в андроидном затмении, у меня возникла проблема с командой входа в систему. Я уже зарегистрирован, но я не могу войти в систему, имя пользователя и пароль уже зарегистрированы в базе данных с помощью браузера sqlite. Но когда я помещаю имя пользователя и пароль, я не могу войти в систему. Я не знаю, где ошибка. пожалуйста помоги.android eclipse plus sqlite "log in issue"

вот мой mainactivity.java код:

   package com.example.howtos; 



      import com.example.howtos.DatabaseManager; 
         import com.example.howtos.MainActivity; 
            import com.example.howtos.R; 
            import com.example.howtos.reg; 

            import android.os.Bundle; 
            import android.app.Activity; 
            import android.content.Intent; 
            import android.database.Cursor; 
            import android.database.CursorIndexOutOfBoundsException; 
            import android.view.View; 
            import android.widget.Button; 
            import android.widget.EditText; 
            import android.widget.TextView; 
            import android.widget.Toast; 


            public class MainActivity extends Activity { 

             @Override 
       protected void onCreate(Bundle savedInstanceState) { 
              super.onCreate(savedInstanceState); 
              setContentView(R.layout.activity_main); 

              final DatabaseManager dataBase; 
              dataBase = DatabaseManager.instance(); 

              Button b = (Button) findViewById (R.id.btn12); 
              b.setOnClickListener(new View.OnClickListener() { 
               @Override public void onClick(View v) { 
      try 
      { 
      final EditText username = (EditText) findViewById(R.id.editText1); 
      final EditText password = (EditText) findViewById(R.id.editText2); 

      final String COLUMN_PW = "password"; 

      Cursor cursor = dataBase.select("SELECT password FROM users WHERE username = '" + username.getText().toString() + "';"); 
      String s = cursor.getString(cursor.getColumnIndex(COLUMN_PW)); 

      if(password.getText().toString() == s) 
      { 
          startActivity(new Intent(MainActivity.this,homepage.class)); 


       Toast.makeText(getApplicationContext(), "Successfully Login", Toast.LENGTH_SHORT).show(); 
       cursor.close(); 
       }        
       } 
       catch(CursorIndexOutOfBoundsException e1) 
       { 
       Toast.makeText(getApplicationContext(), "Invalid Username or Password", Toast.LENGTH_SHORT).show(); 
       }  


               } 
              }); 

      TextView r = (TextView) findViewById (R.id.textView7); 
      r.setOnClickListener(new View.OnClickListener() { 
      @Override public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this,reg.class)); 
      } 
      }); 
     } 



            } 

ответ

0

Вопрос, скорее всего, с этой линией:

if(password.getText().toString() == s) 

, который должен стать:

if(password.getText().toString().equals(s)) 

В Java, с помощью " == 'всегда сравнивает ссылки на объекты, и хотя две строки могут содержать одно и то же значение, это разные объекты, так что ваше сравнение всегда терпит неудачу. Следовательно, вы должны использовать метод «equals» в строке, который будет сравнивать строковые значения. Всестороннее объяснение можно найти здесь:

How do I compare strings in Java?

Edit:

Вторая проблема состоит в том, что вы получаете CursorIndexOutOfBoundsException (потому что поймать блок для того, где ваш недопустимое сообщение пароль поставляется с) , Открыв курсор, вам нужно, чтобы переместить его в первый ряд, прежде чем пытаться получить доступ к данным из него:

cursor.MoveToFirst(); 

Также вам необходимо будет отображать сообщение об ошибке, когда пароль/имя пользователя неправильно. Например:

try 
{ 
    final EditText username = (EditText) findViewById(R.id.editText1); 
    final EditText password = (EditText) findViewById(R.id.editText2); 

    final String COLUMN_PW = "password"; 

    Cursor cursor = dataBase.select("SELECT password FROM users WHERE username = '" + username.getText().toString() + "';"); 
    cursor.MoveToFirst(); 
    String s = cursor.getString(cursor.getColumnIndex(COLUMN_PW)); 

    if(password.getText().toString().equals(s)) 
    { 
     startActivity(new Intent(MainActivity.this,homepage.class)); 
     Toast.makeText(getApplicationContext(), "Successfully Login", Toast.LENGTH_SHORT).show(); 
     cursor.close(); 
    }        
    else 
    { 
     Toast.makeText(getApplicationContext(), "Invalid Username or Password", Toast.LENGTH_SHORT).show(); 
    } 
} 
catch(CursorIndexOutOfBoundsException e1) 
{ 
    Toast.makeText(getApplicationContext(), "Error accessing database", Toast.LENGTH_SHORT).show(); 
} 

помнить также, чтобы проверить, что ваш курсор на самом деле вернулся любые данные, прежде чем читать из него (что здесь может произойти, если имя пользователя не существует). Вы можете это сделать, проверив значение cursor.getCount()

+0

благодарим за ответ, но все еще не сработало. он просто сохраняется в базе данных, но когда я нажимаю кнопку входа в систему, он говорит «неверное имя пользователя или пароль». есть ли другие варианты? Спасибо! –

+0

Существует 2-й вопрос, который я объяснил в моем правлении выше. – NigelK

+0

Это работает! Большое спасибо @NigelK, я буду изучать больше, что вы сказали –