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 行是这样的:

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

这是我的数据库的类

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;
}

}

4

1 回答 1

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 仍然没有告诉你什么null.

于 2013-06-03T01:29:45.727 回答