>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



SingleCursorAdapter Android não executa no emulador


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

}

}


o sqlite fiz em uma classe "main" do projeto desta forma:

e visualmente no eclipse consta desta forma:


@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();
}


e visualmente no eclipse consta desta forma:



7 Respostas


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

} */
}


mas a aplicação não executa.




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