对不起伙计们,但我是新来的,所以如果我做错了就让我知道,我会确保我不会让它再次发生!
好吧,我有一个名为“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;
}
}
答案 0 :(得分: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
。