0
Guys: I’m creating a stock control application, I have a screen as follows:
When I click on the "PRODUCT" button it was to go to that other screen:
Only when I click on the button "PRODUCT" the application hangs, and I added a Listview to list the registered products, commenting on the code of Listview it works, but my intention is to leave listed the products as soon as you open the screen Products, follows the code below:
Code of Class Products:
public class Produtos extends AppCompatActivity implements SearchView.OnQueryTextListener {
DBHelper bd;
ArrayList<Produto> listaProdutos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.produtos);
bd = new DBHelper(this);
ListView lista = (ListView)findViewById(R.id.ltvProdutos);
listaProdutos = bd.getAllProdutos();
ProdutoAdapter adapter = new ProdutoAdapter(this, listaProdutos);
lista.setAdapter(adapter);
lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(Produtos.this, EditarProduto.class);
intent.putExtra("ID", listaProdutos.get(i).getId());
startActivity(intent);
}
});
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(Produtos.this, CadastroProduto.class);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.navigation, menu);
MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
// User pressed the search button
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// User changed the text
return false;
}
}
Bank class code:
public class DBHelper extends SQLiteOpenHelper {
private static final int VERSAO_BANCO = 1;
private static final String NOME_BANCO = "CONTROLE_DE_ESTOQUE";
private static final String TABELA_PRODUTOS = "produtos";
private static final String ID = "_id";
private static final String DESCRICAO = "descricao";
private static final String CATEGORIA = "categoria";
private static final String UNIDADEMEDIDA = "unidadeMedida";
private static final String ESTOQUE_ATUAL = "estoqueAtual";
private static final String ESTOQUE_MINIMO = "estoqueMinimo";
private static final String VALOR_CUSTO = "valorCusto";
private static final String VALOR_VENDA = "valorVenda";
private static final String[] COLUNAS = {TABELA_PRODUTOS};
private static final String TABELA_FORNECEDORES = "fornecedores";
private static final String ID_FORNECEDOR = "_id";
private static final String RAZAO_SOCIAL = "razaoSocial";
private static final String CNPJ = "cnpj";
private static final String INSCRICAO_ESTADUAL = "inscricaoEstadual";
private static final String TELEFONE = "telefone";
private static final String ENDERECO = "endereco";
private static final String[] COLUNAS_FORNECEDOR = {TABELA_FORNECEDORES};
public DBHelper(Context context) {
super(context, NOME_BANCO, null, VERSAO_BANCO);
}
@Override
public void onCreate(SQLiteDatabase db) {
String QUERY_USUARIO = "CREATE TABLE TABELA_USUARIOS (_ID integer primary key autoincrement, nomeUsuario TEXT, senha TEXT);";
db.execSQL(QUERY_USUARIO);
String QUERY_PRODUTO = "CREATE TABLE TABELA_PRODUTOS (_ID integer primary key autoincrement, descricao TEXT, categoria TEXT," +
" unidadeMedida TEXT, valorCusto TEXT, valorVenda TEXT, estoqueAtual TEXT, estoqueMinimo TEXT);";
db.execSQL(QUERY_PRODUTO);
String QUERY_FORNECEDOR = "CREATE TABLE TABELA_FORNECEDORES (_ID integer primary key autoincrement, razaoSocial TEXT, cnpj TEXT," +
" inscricaoEstadual TEXT, telefone TEXT, endereco TEXT);";
db.execSQL(QUERY_FORNECEDOR);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS TABELA_USUARIOS;");
onCreate(db);
}
public long CriarUsuario(String nomeUsuario, String senha) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("nomeusuario", nomeUsuario);
cv.put("senha", senha);
long result = db.insert("TABELA_USUARIOS", null, cv);
return result;
}
public String ValidarUsuario(String nomeUsuario, String senha) {
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.rawQuery("SELECT * FROM TABELA_USUARIOS WHERE nomeUsuario=? AND senha=?", new String[]{nomeUsuario, senha});
if (c.getCount() > 0) {
return "OK";
}
return "ERRO";
}
public long CriarProduto(Produto produto) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DESCRICAO, produto.getDescricao());
cv.put(CATEGORIA, produto.getCategoria());
cv.put(UNIDADEMEDIDA, produto.getUnidadeMedida());
cv.put(ESTOQUE_ATUAL, produto.getEstoqueAtual());
cv.put(ESTOQUE_MINIMO, produto.getEstoqueMinimo());
cv.put(VALOR_CUSTO, produto.getValorCusto());
cv.put(VALOR_VENDA, produto.getValorVenda());
long result = db.insert("TABELA_PRODUTOS", null, cv);
return result;
}
public Produto getProduto(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABELA_PRODUTOS, // a. tabela
COLUNAS, // b. colunas
" id = ?", // c. colunas para comparar
new String[] { String.valueOf(id) }, // d. parâmetros
null, // e. group by
null, // f. having
null, // g. order by
null); // h. limit
if (cursor == null) {
return null;
} else {
cursor.moveToFirst();
Produto produto = cursorToProduto(cursor);
return produto;
}
}
private Produto cursorToProduto(Cursor cursor) {
Produto produto = new Produto();
produto.setId(Integer.parseInt(cursor.getString(0)));
produto.setDescricao(cursor.getString(1));
produto.setCategoria(cursor.getString(2));
produto.setUnidadeMedida(cursor.getString(3));
produto.setValorCusto(cursor.getString(4));
produto.setEstoqueAtual(Integer.parseInt(cursor.getString(5)));
return produto;
}
public ArrayList<Produto> getAllProdutos() {
ArrayList<Produto> listaProdutos = new ArrayList<Produto>();
String query = "SELECT * FROM " + TABELA_PRODUTOS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()) {
do {
Produto produto = cursorToProduto(cursor);
listaProdutos.add(produto);
} while (cursor.moveToNext());
}
return listaProdutos;
}
}
And the error that appears in logCat:
11-15 20:44:23.340 3574-3591/com.example.rodrigoconceicao.controleestoque2_1
E/EGL_emulation: tid 3591: eglSurfaceAttrib(1210): error 0x3009
(EGL_BAD_MATCH)
11-15 20:44:32.923 3574-3591/com.example.rodrigoconceicao.controleestoque2_1 E/EGL_emulation: tid 3591: eglSurfaceAttrib(1210): error 0x3009 (EGL_BAD_MATCH)
11-15 20:44:33.373 3574-3591/com.example.rodrigoconceicao.controleestoque2_1 E/EGL_emulation: tid 3591: eglSurfaceAttrib(1210): error 0x3009 (EGL_BAD_MATCH)
11-15 20:44:35.791 3574-3574/com.example.rodrigoconceicao.controleestoque2_1 E/SQLiteLog: (1) no such table: produtos
11-15 20:44:35.796 3574-3574/com.example.rodrigoconceicao.controleestoque2_1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rodrigoconceicao.controleestoque2_1, PID: 3574
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rodrigoconceicao.controleestoque2_1/com.example.rodrigoconceicao.controleestoque2_1.Produtos}: android.database.sqlite.SQLiteException: no such table: produtos (code 1): , while compiling: SELECT * FROM produtos
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.database.sqlite.SQLiteException: no such table: produtos (code 1): , while compiling: SELECT * FROM produtos
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
at com.example.rodrigoconceicao.controleestoque2_1.DBHelper.getAllProdutos(DBHelper.java:131)
at com.example.rodrigoconceicao.controleestoque2_1.Produtos.onCreate(Produtos.java:31)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)