>
Estou desenvolvendo um aplicativo, e na tela ele busca informações de um sqlite por meio de um spinner, mas a aplicação não é executa, por conta do SingleCursorAdapter em uma classe no Android.
abaixo o código da classe:
package com.example.vendas;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.Button;
import android.widget.Spinner;
public class NovaVendaActivity extends Main{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.nova_venda);
Spinner spProdutos = (Spinner)findViewById(R.id.spProdutos);
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
Cursor cursor = db.rawQuery("SELECT * FROM PRODUTOS ORDER BY NOME ASC", null);
String[] from = {"_id", "nome", "preco"};
int[] to = {R.id.txvId,R.id.txvNome, R.id.txvPreco};
SimpleCursorAdapter ad = new /*esse aqui*/SimpleCursorAdapter/*esse aqui*/(getBaseContext(), R.layout.spinner, cursor, from, to);
spProdutos.setAdapter(ad);
Button btnSalvar = (Button)findViewById(R.id.btnSalvar);
btnSalvar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ação
}
});
}
public void Salvar_click(View view){
//ação
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
StringBuilder sqlProdutos = new StringBuilder();
sqlProdutos.append("CREATE TABLE IF NOT EXISTS [PRODUTOS](");
sqlProdutos.append("[_ID] INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlProdutos.append("NOME VARCHAR(100),");
sqlProdutos.append("PRECO DOUBLE(10,2));");
db.execSQL(sqlProdutos.toString());
db.execSQL("INSERT INTO PRODUTOS (NOME, PRECO) VALUES('COKE','2.50')");
db.execSQL("INSERT INTO PRODUTOS (NOME, PRECO) VALUES('Red Bull','8.00')");
db.execSQL("INSERT INTO PRODUTOS (NOME, PRECO) VALUES('ALFACE','2.70')");
StringBuilder sqlVendas = new StringBuilder();
sqlVendas.append("CREATE TABLE IF NOT EXISTS [VENDAS](");
sqlVendas.append("[_ID] INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlVendas.append("PRODUTO INTEGER),");
sqlVendas.append("PRECO DOUBLE(10,2),");
sqlVendas.append("LA DOUBLE(10,9),");
sqlVendas.append("LO DOUBLE (10,9));");
db.execSQL(sqlVendas.toString());
db.close();
}
De acordo com algumas pesquisas que fiz, adaptei desta forma:
package com.example.vendas;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class Main extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase db = openOrCreateDatabase("vendas.db", Context.MODE_PRIVATE, null);
StringBuilder sqlProdutos = new StringBuilder();
sqlProdutos.append("CREATE TABLE IF NOT EXISTS [PRODUTOS](");
sqlProdutos.append("[_ID] INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlProdutos.append("NOME VARCHAR(100),");
sqlProdutos.append("PRECO DOUBLE(10,2));");
db.execSQL(sqlProdutos.toString());
db.execSQL("INSERT INTO PRODUTOS (NOME, PRECO) VALUES('COKE','2.50')");
db.execSQL("INSERT INTO PRODUTOS (NOME, PRECO) VALUES('Red Bull','8.00')");
//db.execSQL("INSERT INTO PRODUTOS (NOME, PRECO) VALUES('ALFACE','2.70')");
StringBuilder sqlVendas = new StringBuilder();
sqlVendas.append("CREATE TABLE IF NOT EXISTS [VENDAS](");
sqlVendas.append("[_ID] INTEGER PRIMARY KEY AUTOINCREMENT,");
sqlVendas.append("PRODUTO INTEGER),");
sqlVendas.append("PRECO DOUBLE(10,2),");
sqlVendas.append("LA DOUBLE(10,9),");
sqlVendas.append("LO DOUBLE (10,9));");
db.execSQL(sqlVendas.toString());
db.close();
}
public void Novavenda_click(View v){
startActivity(new Intent(getBaseContext(), NovaVendaActivity.class)) ;
}
/* @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} */
}
Jonathan
Qual o erro gerado?
Então, inclui na imagem no primeiro post como deve ter percebido. um comando parece ter sido depreciado.
tentei resolver conforme acima, mas de qualquer maneira a aplicação não abre ao ser enviada ao emulador. isso depois da inserção do código modificado.
Olá
Veja se resolve:
http://rlsystem.com.br/forum/buscar/432-simplecursoradapter-depracated#top
é o seguinte... eu já olhei por aí.
acho que o curso deveria estar atualizado, por que passar conteúdo antigo, acaba atrasando o aprendizado.
Ola Jonathan
Veja o curso de Android Best Practices, lá é falado de como criar os próprios adapater, que é uma boa prática.
ou entao veja este topico aqui
http://rlsystem.com.br/forum/android/198-erro-criacao-do-simplecursoradapter