2013-06-03 3 views
0

Извините, но я новичок в этом, так что если я что-то сделаю неправильно, просто сообщите мне, и я буду уверен, что я не позволю этому случиться снова!Невозможно выполнить метод, когда пользователь нажимает кнопку

Ну, у меня есть метод под названием «verificaLogin», который проверяет, соответствуют ли логин и пароль, которые были введены на экране входа в систему.

Проблема в том, что когда я нажимаю кнопку, я получаю исключение.

Это мой код

public class MainActivity extends Activity{ 

Button btnNovo, btnEntrar; 
EditText txtLoginAcesso, txtSenhaAcesso; 
//Button btnMainChat, btnMainUpload, btnMainAlbuns, btnMainAccount; 

//private MainFragment mainFragment; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    btnNovo = (Button) findViewById(R.id.btnNovo); 
    btnEntrar = (Button) findViewById(R.id.btnEntrar); 


    //botão novo - configuração 
     btnNovo = (Button)findViewById(R.id.btnNovo); 
     btnNovo.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       Intent trocatela = new Intent(MainActivity.this,CadastroActivity.class); 
       MainActivity.this.startActivity(trocatela); 
       //TelaPrincipalActivity.this.finish(); 
      }}); 

     //botão entrar - configuração 
     btnEntrar = (Button)findViewById(R.id.btnEntrar); 
     btnEntrar.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       verificaLogin(); 
       //Intent trocatela = new Intent(MainActivity.this,TelaPrincipalActivity.class); 
       //MainActivity.this.startActivity(trocatela); 
       //TelaPrincipalActivity.this.finish(); 
      }}); 



public void verificaLogin(){ 
    try { 
     String DATABASE_TABLE = "Usuarios"; 
     SQLiteDatabase db = null; 
     ContextoDados cd = new ContextoDados(this); 
     cd.open(); 
     Cursor cursor; 

     cursor = db.rawQuery("SELECT * FROM Usuarios WHERE Login LIKE'" + txtLoginAcesso.getText()+"'",null); 


     if(cursor.getCount() < 1) 
     { 

      //System.out.println("Acesso ok"); 
      setContentView(R.layout.cadastro); 

     } 
     else 
     { 
      if(cursor.getString(cursor.getColumnIndex("Senha")).equals (txtSenhaAcesso.getText().toString())) { 
      setContentView(R.layout.telaprincipal); 
      } else { //se for diferente ele diz que está errada 
       setContentView(R.layout.cadastro); 
      } 

    } 
    // irá sempre limpar os campos 
    txtLoginAcesso.setText(""); 
    txtSenhaAcesso.setText(""); 
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 

} 


} 

И исключение, которое я вижу:

java.lang.NullPointerException com.OnTheParty.Tcc.MainActivity.verificaLogin (MainActivity.java:99)

- линия 99 это:

курсор = db.rawQuery ("SELECT * FROM Юзеров WHERE Вход LIKE '" + txtLoginAcesso.getText() + "'", нулевой);

Вот класс моей базы данных

public class ContextoDados{ 


private static final String NOME_BD = "CadastroUsuario"; 
private static final int VERSAO_BD = 4; 
private static final String LOG_TAG = "CadastroUsuario"; 


private static final String DATABASE_TABLE = "Usuarios"; 
public static final String KEY_ROWID = "Id"; 
public static final String KEY_NOME = "Nome"; 
public static final String KEY_LOGIN = "Login"; 
public static final String KEY_EMAIL = "Email"; 
public static final String KEY_SENHA = "Senha"; 



private final Context context; 
private SQLiteDatabase db; 
private DatabaseHelper DBHelper; 
public static final String DATABASE_CREATE = "CREATE TABLE Usuarios (ID INTEGER PRIMARY KEY AUTOINCREMENT, Nome TEXT, Login TEXT, Email TEXT, Senha TEXT);"; 
public static final String DATABASE_DROP = "DROP TABLE IF EXISTS Usuarios"; 

public ContextoDados(Context ctx) { 
    this.context = ctx; 
    DBHelper = new DatabaseHelper(context); 
} 

private static class DatabaseHelper extends SQLiteOpenHelper{ 

    DatabaseHelper(Context context){ 
     super(context, NOME_BD, null, VERSAO_BD); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     try 
     { 
      db.execSQL(DATABASE_CREATE); 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
    } 



    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     Log.w(LOG_TAG, "Atualizando a base de dados da versão " + oldVersion + " para " + newVersion + ", que destruirá todos os dados antigos"); 
     db.execSQL(DATABASE_DROP); 
     onCreate(db); 
    } 

} 
//abrir banco de dados 
public ContextoDados open() throws SQLException{ 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 

//fechar banco de dados 
public void close(){ 
    DBHelper.close(); 
} 

//inserir valor 
public long inserirUsuario(String Nome, String Login, String Email, String Senha){ 

    db = DBHelper.getWritableDatabase(); 
    try{ 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put("Nome", Nome); 
     initialValues.put("Login", Login); 
     initialValues.put("Email", Email); 
     initialValues.put("Senha", Senha); 
     return db.insert("Usuarios", null, initialValues); 
    } 
    finally{ 
     db.close(); 
    } 
} 




public boolean deletarUsuario(long rowId){ 
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
} 


//retorna todos os valores da tabela MENOS A SENHA 
public Cursor getTodosUsuarios(){ 
    return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NOME, KEY_LOGIN, KEY_EMAIL}, null, null, null, null, null); 
} 



//retorna um valor especifico 
public Cursor getUsuarioEspecifico(long rowId) throws SQLException { 
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NOME, KEY_LOGIN, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null, null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 


//atualiza valores da tabela MENOS SENHA 
public boolean atualizaUsuario(long rowId, String Nome, String Login, String Email){ 
    ContentValues args = new ContentValues(); 
    args.put(KEY_NOME, Nome); 
    args.put(KEY_LOGIN, Login); 
    args.put(KEY_EMAIL, Email); 
    return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 
    0; 
} 

}

+1

SQLiteDatabase db = null; -> где ваш дБ? – muratgu

+0

Возможно, на самом деле установить db в контексте вместо NULL? (какой BTW вы бы увидели в отладчике) –

+0

Это не проблема, но я хотел бы указать, что вы дважды инициализируете свои кнопки 'Buttons' – codeMagic

ответ

1
SQLiteDatabase db = null; 
ContextoDados cd = new ContextoDados(this); 
cd.open(); 
Cursor cursor; 
cursor = db.rawQuery("SELECT * FROM Usuarios WHERE Login LIKE'" + txtLoginAcesso.getText()+"'",null); 

Ваша переменная db может быть только null в этой точке. Вы явно инициализировали его как null.

Если у вас такие исключения, вы можете попробовать отладчик. Он скажет вам , где проблема.

Со всеми этими годами развития java все еще не сообщает вам , что is null.

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