Boa noite, estou seguindo um exemplo para gravar dados no SQLite dento do android, mais não esta dando certo. Segui todo o exemplo adaptando a minha necessidade, só que na hora de gravar da erro
O logcat
[quote]12-13 22:18:30.079: W/KeyCharacterMap(2433): No keyboard for id 0
12-13 22:18:30.079: W/KeyCharacterMap(2433): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-13 22:18:30.999: D/AndroidRuntime(2433): Shutting down VM
12-13 22:18:30.999: W/dalvikvm(2433): threadid=1: thread exiting with uncaught exception (group=0x40018578)
12-13 22:18:30.999: E/AndroidRuntime(2433): FATAL EXCEPTION: main
12-13 22:18:30.999: E/AndroidRuntime(2433): java.lang.NullPointerException
12-13 22:18:30.999: E/AndroidRuntime(2433): at br.com.azsolucoes.azcomanda.activities.ConfiguracoesEditarActivity.inserirConfig(ConfiguracoesEditarActivity.java:150)
12-13 22:18:30.999: E/AndroidRuntime(2433): at br.com.azsolucoes.azcomanda.activities.ConfiguracoesEditarActivity.access$2(ConfiguracoesEditarActivity.java:127)
12-13 22:18:30.999: E/AndroidRuntime(2433): at br.com.azsolucoes.azcomanda.activities.ConfiguracoesEditarActivity$5.onClick(ConfiguracoesEditarActivity.java:122)
12-13 22:18:30.999: E/AndroidRuntime(2433): at android.view.View.performClick(View.java:2485)
12-13 22:18:30.999: E/AndroidRuntime(2433): at android.view.View$PerformClick.run(View.java:9080)
12-13 22:18:30.999: E/AndroidRuntime(2433): at android.os.Handler.handleCallback(Handler.java:587)
12-13 22:18:30.999: E/AndroidRuntime(2433): at android.os.Handler.dispatchMessage(Handler.java:92)
12-13 22:18:30.999: E/AndroidRuntime(2433): at android.os.Looper.loop(Looper.java:130)
12-13 22:18:30.999: E/AndroidRuntime(2433): at android.app.ActivityThread.main(ActivityThread.java:3687)
12-13 22:18:30.999: E/AndroidRuntime(2433): at java.lang.reflect.Method.invokeNative(Native Method)
12-13 22:18:30.999: E/AndroidRuntime(2433): at java.lang.reflect.Method.invoke(Method.java:507)
12-13 22:18:30.999: E/AndroidRuntime(2433): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
12-13 22:18:30.999: E/AndroidRuntime(2433): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
12-13 22:18:30.999: E/AndroidRuntime(2433): at dalvik.system.NativeStart.main(Native Method)
[/quote]
Vou postar todo o codigo pra ver se alguém pode dizer o que esta errado.
A classe databaseHelper
[code]package br.com.azsolucoes.azcomanda.utils;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;
import br.com.azsolucoes.azcomanda.pojo.Casa;
public class DatabaseHelper extends SQLiteOpenHelper {
private SQLiteDatabase db;
private SQLiteStatement insertCasas;
// tabelas e campos
public static final String TABLE_NAME = "casas";
public static final String ID = "_id";
public static final String DESCRICAO = "descricao";
public static final String SENHA = "senha";
public static final String IP = "ip";
public static final String PORTA = "posta";
// monta o create table
private static final String DATABASE_CREATE = "create table " + TABLE_NAME
+ "( " + ID + " integer primary key autoincrement, " + DESCRICAO
+ " text not null, " + SENHA + " text not null, " + IP
+ " text not null" + ", " + PORTA + " integer);";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
Log.i("AZComanda", "Passou no oncreate da tabela");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(DatabaseHelper.class.getName(), "Upgrading database from version "
+ oldVersion + " to " + newVersion
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
// metodos insert
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
this.db = getWritableDatabase();
String insert = " INSERT INTO casas (descricao, senha, ip, porta) "
+ " values(?, ?, ?, ?)";
this.insertCasas = this.db.compileStatement(insert);
// novos inserts definir aqui
}
public long inserirCasas(Casa casa) {
insertCasas.bindString(1, casa.getDescricao());
insertCasas.bindString(2, casa.getSenha());
insertCasas.bindString(3, casa.getIp());
insertCasas.bindLong(4, casa.getPorta());
return insertCasas.executeInsert();
}
// metodo update
public int atualizarCasa(Casa casa) {
ContentValues values = new ContentValues();
values.put("descricao", casa.getDescricao());
values.put("senha", casa.getSenha());
values.put("ip", casa.getIp());
values.put("porta", casa.getId());
String whereClause = "id = ?";
String[] whereArgs = new String[] { casa.getId() + "" };
return this.db.update("Casas", values, whereClause, whereArgs);
}
private Casa cursorToCasa(Cursor c) {
Casa casa = new Casa();
casa.setId(c.getInt(0));
casa.setDescricao(c.getString(1));
casa.setSenha(c.getString(2));
casa.setIp(c.getString(3));
casa.setPorta(c.getInt(4));
return casa;
}
public Casa getProdutoById(long id) {
Casa casa = null;
String query = "SELECT * FROM casas WHERE id = ?";
Cursor c = db.rawQuery(query, new String[] { id + "" });
if (c.moveToFirst())
casa = cursorToCasa(c);
return casa;
}
public List<Casa> listarTodasCasas() {
List<Casa> lista;
String query = " SELECT * FROM casas";
Cursor c = db.rawQuery(query, null);
lista = cursorListToListaCasas(c);
return lista;
}
private List<Casa> cursorListToListaCasas(Cursor c) {
List<Casa> lista = new ArrayList<Casa>();
if (c.moveToFirst()) {
do {
lista.add(cursorToCasa(c));
} while (c.moveToNext());
}
return lista;
}
}[/code]
a classe Casa
[code]package br.com.azsolucoes.azcomanda.pojo;
public class Casa {
private int id;
private String descricao;
private String senha;
private String ip;
private int porta;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPorta() {
return porta;
}
public void setPorta(int porta) {
this.porta = porta;
}
}
[/code]
A classe App
[code]package br.com.azsolucoes.azcomanda.activities;
import android.app.Application;
import br.com.azsolucoes.azcomanda.utils.DatabaseHelper;
public class App extends Application {
private DatabaseHelper databaseHelper;
public DatabaseHelper getDatabaseHelper() {
return databaseHelper;
}
/** Nome do banco de dados **/
private static final String NOME_BD = "azcomanda.db";
/**
* A versão da base de dados. Cada vez que atualizar o onUpgrade da classe
* DatabaseHelper deve alterar a versão aqui
*/
private static final int VERSAO_BD = 1;
@Override
public void onCreate() {
super.onCreate();
databaseHelper = new DatabaseHelper(this, NOME_BD, null, VERSAO_BD);
}
}
[/code]
E o método a aonde estou chamando
botao_salvar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
inserirConfig();
}
});
[code]private void inserirConfig() {
String descricao = edt_descricao.getText().toString();
String senha = edt_senha.getText().toString();
String ip = edt_ip.getText().toString();
int porta = Integer.parseInt(edt_porta.getText().toString());
if ((descricao.equals("")) || (senha.equals("")) || (ip.equals(""))
|| (porta <= 0)) {
Toast.makeText(this, getString(R.string.msg_preenchadados),
Toast.LENGTH_LONG).show();
} else {
App app = new App(); //(App) getApplicationContext();
Casa casa = new Casa();
casa.setId(id);
casa.setDescricao(descricao);
casa.setSenha(senha);
casa.setIp(ip);
casa.setPorta(porta);
// se a variavel for zero então insere, se não faz update
if (id == 0) {
app.getDatabaseHelper()
.inserirCasas(casa);
} else {
int atualizou = app.getDatabaseHelper().atualizarCasa(
casa);
if (atualizou > 0) {
Toast.makeText(this,
getString(R.string.msg_configatualizada),
Toast.LENGTH_SHORT).show();
}
}
}
}
[/code]
Mais aqui nesta linha quando chama este metodo INSERIRCASAS
if (id == 0) {
app.getDatabaseHelper()
.inserirCasas(casa);
Aqui não esta funcionando
[code]public long inserirCasas(Casa casa) {
insertCasas.bindString(1, casa.getDescricao());
insertCasas.bindString(2, casa.getSenha());
insertCasas.bindString(3, casa.getIp());
insertCasas.bindLong(4, casa.getPorta());
return insertCasas.executeInsert();
}[/code]
Mudei aqui também
O codigo original do exemplo era assim
Mais assim dava erro
Quando alterei assim
Passou nesta linha, mais ai gera o erro la aonde falei INSERIRCASAS
Obrigado a todos que me ajudarem.