Bom dia pessoal! Tudo bem?
É o seguinte estou começando a estudar desenvolvimento android para fazer um projeto até o final do semestre.
No caso meu grupo optou por desenvolver um aplicativo a respeito do brasileirão 2012, onde irá conter tabela de classificação, jogos da rodada e estatísticas individuais dos clubes. Porém pintou uma dúvida como posso fazer essa tabela de classificação?
O que seria Ideal? Fazer tudo na unha como vou integra-la com o banco de dados e ao atualizar as informações as mesma serem atualizadas na tabela? Alguém pode me ajudar com essas dúvidas
Obrigado
Fala cara joia.
Tenta montar um GridView com Scroll Horizontal.
sei lá é uma ideia.
Se fosse tu, fazia uma tabela para os jogos e resultados, gols etc, e outra pelo pontos com a classificação. Pois são várias regras que vão ter de ser olhadas caso um time esteja em primeiro ou segundo além somente da pontuação.
Creio que tu teria de possuir um lugar na web de onde pegar essas informações e atualizar para todos dispositivos que possuem esse programa e tal.
Como é um projeto de facul, não vou aumentar a dificuldade não, vou focar apenas no básico da aplicação entendeu?
To conseguindo fazer, porém está ocorrendo alguns erros quando tento trazer infromações do banco de dados na ListActivity vou postar o código
Minha classe Classificacao
package br.projetoAplicado.android.brasileirao.banco;
import android.content.ContentUris;
import android.net.Uri;
import android.provider.BaseColumns;
public class Classificacao{
public static final String AUTHORITY = "br.livro.android.provider.carro";
public int id;
public String nomeClube;
public int pontos;
public int jogos;
public int vitorias;
public int empates;
public int derrotas;
public int GP;
public int GC;
public int SG;
public double aproveitamento;
public Classificacao(){
}
public Classificacao(String nomeClube,int pontos,int jogos,int vitorias,int empates,
int derrotas,int GP,int GC,int SG,double aproveitamento){
super();
this.nomeClube = nomeClube;
this.pontos = pontos;
this.jogos = jogos;
this.vitorias = vitorias;
this.empates = empates;
this.derrotas = derrotas;
this.GP = GP;
this.GC = GC;
this.SG = SG;
this.aproveitamento = aproveitamento;
}
public Classificacao(int id, String nomeClube,int pontos,int jogos,int vitorias,int empates,
int derrotas,int GP,int GC,int SG,double aproveitamento){
super();
this.id = id;
this.nomeClube = nomeClube;
this.pontos = pontos;
this.jogos = jogos;
this.vitorias = vitorias;
this.empates = empates;
this.derrotas = derrotas;
this.GP = GP;
this.GC = GC;
this.SG = SG;
this.aproveitamento = aproveitamento;
}
public static final class Classificacoes implements BaseColumns{
//Não pode instanciar esta Classe
private Classificacoes() {
// TODO Auto-generated constructor stub
}
public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORITY+"/carros");
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.classificacoes";
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.classificaoes";
public static final String DEFAULT_SORT_ORDER = "pontos ASC";
public static final String NOMECLUBE = "nomeClube";
public static final String PONTOS = "pontos";
public static final String JOGOS = "jogos";
public static final String VITORIAS = "vitorias";
public static final String EMPATES = "empates";
public static final String DERROTAS = "derrotas";
public static final String GP = "GP";
public static final String GC = "GC";
public static final String SG = "SG";
public static final String APROVEITAMENTO = "aproveitamento";
public static Uri getUriId(int id){
Uri uriClassificacao = ContentUris.withAppendedId(Classificacoes.CONTENT_URI, id);
return uriClassificacao;
}
}
@Override
public String toString(){
return nomeClube+" "+pontos+" "+jogos+" "+vitorias+" "+empates+" "+derrotas+" "+GP+" "+GC+" "+SG+" "+aproveitamento;
}
}
Minha classe para exibir a ListActivy na tela
package br.projetoAplicado.android.brasileirao.banco;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
public class ExibeClassi extends ListActivity {
public static RepositorioClassi repositorio;
private List<Classificacao> classi;
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
repositorio = new RepositorioClassificacaoScript(this);
//Pega lista de Carros e exibe na tela
classi = repositorio.listaClassificacao();
//Adaptador de lista customizado para cada linhade um carro
setListAdapter(new ClassiListAdapter(this, classi));
}
}
Classe que monta a Lista
[code]
package br.projetoAplicado.android.brasileirao.banco;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import br.projetoAplicado.android.brasileirao.banco.R;
public class ClassiListAdapter extends BaseAdapter {
private Context context;
private List lista;
public ClassiListAdapter(Context context, List lista){
this.context = context;
this.lista = lista;
}
public int getCount(){
return lista.size();
}
public Object getItem(int position){
return lista.get(position);
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
Classificacao c = lista.get(position);
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.classificacao, null);
TextView nomeClube = (TextView)view.findViewById(R.id.nomeClubeTab);
nomeClube.setText(c.nomeClube);
TextView pontos = (TextView)view.findViewById(R.id.pontosTab);
pontos.setText(c.pontos);
TextView jogos = (TextView)view.findViewById(R.id.jogosTab);
jogos.setText(c.jogos);
TextView vitorias = (TextView)view.findViewById(R.id.vitoriasTab);
vitorias.setText(c.vitorias);
TextView empates = (TextView)view.findViewById(R.id.empatesTab);
empates.setText(c.empates);
TextView derrotas = (TextView)view.findViewById(R.id.derrotasTab);
derrotas.setText(c.derrotas);
TextView gp = (TextView)view.findViewById(R.id.gpTab);
gp.setText(c.GP);
TextView gc = (TextView)view.findViewById(R.id.gcTab);
gc.setText(c.GC);
TextView sg = (TextView)view.findViewById(R.id.sgTab);
sg.setText(c.SG);
TextView aproveitamento = (TextView)view.findViewById(R.id.aproveitamentoTab);
aproveitamento.setText(String.valueOf(c.aproveitamento));
return view;
}
}[/code]
Minha xml que cria a tela de classificacao
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#DCDCDC" >
<TextView
android:id="@+id/textView1"
android:layout_width="70px"
android:layout_height="wrap_content" android:text="#" android:gravity="center"/>
<TextView
android:id="@+id/pontos"
android:layout_width="50px"
android:layout_height="wrap_content"
android:text="P" android:gravity="center" android:background="#8B8989"/>
<TextView
android:id="@+id/jogos"
android:layout_width="40px"
android:layout_height="wrap_content"
android:text="J" android:gravity="center"/>
<TextView
android:id="@+id/vitorias"
android:layout_width="40px"
android:layout_height="wrap_content"
android:text="V" android:gravity="center"/>
<TextView
android:id="@+id/empates"
android:layout_width="40px"
android:layout_height="wrap_content"
android:text="E" android:gravity="center"/>
<TextView
android:id="@+id/derrotas"
android:layout_width="40px"
android:layout_height="wrap_content"
android:text="D" android:gravity="center"/>
<TextView
android:id="@+id/GP"
android:layout_width="50px"
android:layout_height="wrap_content"
android:text="GP" android:gravity="center"/>
<TextView
android:id="@+id/GC"
android:layout_width="50px"
android:layout_height="wrap_content"
android:text="GC" android:gravity="center"/>
<TextView
android:id="@+id/SG"
android:layout_width="50px"
android:layout_height="wrap_content"
android:text="SG" android:gravity="center"/>
<TextView
android:id="@+id/aproveitamento"
android:layout_width="50px"
android:layout_height="wrap_content"
android:text="%" android:gravity="center"/>
</TableRow>
</TableLayout>
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/posicao"
android:layout_width="35px"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<TextView
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="1" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="2" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView4"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="3" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView5"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="4" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView6"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="5" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView7"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="6" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView8"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="7" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView9"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="8" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView10"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="9" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView11"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="10" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView12"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="11" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView13"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="12" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView14"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="13" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView15"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="14" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView16"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="15" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView17"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="16" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView18"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="17" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView19"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="18" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="19" />
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#000000" />
<TextView
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="32px"
android:gravity="center"
android:text="20" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/posicao" >
<TextView
android:id="@+id/nomeClubeTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/pontosTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/jogosTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/vitoriasTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/empatesTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/derrotasTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/gpTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/gcTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/sgTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/aproveitamentoTab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
e por ultimo o LogCat
05-18 17:08:44.739: E/AndroidRuntime(283): FATAL EXCEPTION: main
05-18 17:08:44.739: E/AndroidRuntime(283): android.content.res.Resources$NotFoundException: String resource ID #0x0
05-18 17:08:44.739: E/AndroidRuntime(283): at android.content.res.Resources.getText(Resources.java:201)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.TextView.setText(TextView.java:2817)
05-18 17:08:44.739: E/AndroidRuntime(283): at br.projetoAplicado.android.brasileirao.banco.ClassiListAdapter.getView(ClassiListAdapter.java:37)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.ListView.makeAndAddView(ListView.java:1727)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.ListView.fillDown(ListView.java:652)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.ListView.fillFromTop(ListView.java:709)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.ListView.layoutChildren(ListView.java:1580)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.view.View.layout(View.java:7035)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.view.View.layout(View.java:7035)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.view.View.layout(View.java:7035)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.view.View.layout(View.java:7035)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.os.Looper.loop(Looper.java:123)
05-18 17:08:44.739: E/AndroidRuntime(283): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 17:08:44.739: E/AndroidRuntime(283): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 17:08:44.739: E/AndroidRuntime(283): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 17:08:44.739: E/AndroidRuntime(283): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 17:08:44.739: E/AndroidRuntime(283): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 17:08:44.739: E/AndroidRuntime(283): at dalvik.system.NativeStart.main(Native Method)
apontando o erro para está linha pontos.setText(c.pontos);
Obrigado
Galera conseguir identificar o erro
troquei a linha e as outrs embaixo da mesma por essa
ai conseguir mostrar os dados, porém há um problema ele recuperou apenas o primeiro dado que estava no banco, achei que ele ia recuperar todos os dados. Como posso fazer isso? teria que criar textviews para cada equipe e depois chamar as informações do banco para cada?
Obrigado
Alguem sabe o que eu posso fazer para mostarr todos os campos?
Obrigado
Faz uma requisição SQL mais completa com todas as informações que você quer utilizando o método rawQuery() e no Cursor você trata os retornos baseado nos campos que você solicitou. 
No caso estou conseguindo fazer a consulta com os campos que eu quero e colocar na tela, porem o que realmente ocorre é a criação de uma tela para cada campo, quando vc da scroll na tela da pra ver que foi criado uma tela para cada registro e no caso quero todos os dados na mesma tela.
estou utilizando a ListActivy
Não entendi muito bem.
Você ta falando que cada campo está uma linha ListView e você queria que seu ListView fosse uma linha com todos os campos?
Porque? Eu não entendi muito bem.
é o seguinte tenho essas classes
[code]package br.projetoAplicado.android.brasileirao.banco;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import br.projetoAplicado.android.brasileirao.banco.R;
public class ClassiListAdapter extends BaseAdapter {
private Context context;
private List lista;
public ClassiListAdapter(Context context, List lista){
this.context = context;
this.lista = lista;
}
public int getCount(){
return lista.size();
}
public Object getItem(int position){
return lista.get(position);
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
Classificacao c = lista.get(position);
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.classificacao, null);
TextView nomeClube = (TextView)view.findViewById(R.id.nomeClubeTab);
nomeClube.setText(c.nomeClube);
TextView pontos = (TextView)view.findViewById(R.id.pontosTab);
pontos.setText(Integer.toString(c.pontos));
TextView jogos = (TextView)view.findViewById(R.id.jogosTab);
jogos.setText(Integer.toString(c.jogos));
TextView vitorias = (TextView)view.findViewById(R.id.vitoriasTab);
vitorias.setText(Integer.toString(c.vitorias));
TextView empates = (TextView)view.findViewById(R.id.empatesTab);
empates.setText(Integer.toString(c.empates));
TextView derrotas = (TextView)view.findViewById(R.id.derrotasTab);
derrotas.setText(Integer.toString(c.derrotas));
TextView gp = (TextView)view.findViewById(R.id.gpTab);
gp.setText(Integer.toString(c.GP));
TextView gc = (TextView)view.findViewById(R.id.gcTab);
gc.setText(Integer.toString(c.GC));
TextView sg = (TextView)view.findViewById(R.id.sgTab);
sg.setText(Integer.toString(c.SG));
TextView aproveitamento = (TextView)view.findViewById(R.id.aproveitamentoTab);
aproveitamento.setText(String.valueOf(c.aproveitamento));
return view;
}
}[/code]
[code]package br.projetoAplicado.android.brasileirao.banco;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
public class ExibeClassi extends ListActivity {
public static RepositorioClassi repositorio;
private List classi;
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
repositorio = new RepositorioClassificacaoScript(this);
classi = repositorio.listaClassificacao();
setListAdapter(new ClassiListAdapter(this, classi));
}
}[/code]
No caso queria que minha informações aparecesse toda na tela, porem está aparecendo um registro em cada tela, entendeu? Estou faznedo isso com ListActivity
Tira um printscreen, ainda não entendi. Você só tem uma tela, como está aparecendo em outras?
Outra coisa, seu adapter não está eficiente. Da uma sacada: http://debugcodigos.blogspot.com.br/2012/05/adapter-eficiente-android.html

Esta é a imagem, no caso eu tenho 20 times cadastrados e o programa está fazendo 20 telas, uma para cada time, sendo que eu queria mostrar tudo em apenas uma tela
Valews
t+
Cara, entendi mas para isso você não pode utilizar de ListActivity.
Utilize uma Activity normal e crie um arquivo de layout com o Header do jeito que você quer, depois preenche um ListView.

E essa justamente minha duvida e estou quebrando a cabeça, como posso fazer isso com o código que ja tenho?
Até tentei colocar a ListView mas nã consegui, poderia me ajudar?
Obrigado
Unica coisa que muda é que você vai implementar no setContentView da Activity um layout que contenha como você quer a tela + listview. 
Depois é só dar um setAdapter com o mesmo adapter que tu criou!
No link que falei ali em cima tem isso.
Vou verificar e dar uma lida e qualquer duvida volto a postar
Felipe, primeiramente parabéns pelo blog, fera d+ ele viu!!!
Também faço Eng. da computação
Fiz as alterações que você propos no video que esta no blog, vou postar como ficou as classes e o erro do LogCat:
Erro LogCat:
05-24 12:54:30.437: D/dalvikvm(274): GC_EXTERNAL_ALLOC freed 1235 objects / 89312 bytes in 63ms
05-24 12:54:30.467: E/Cursor(274): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/br.projetoAplicado.android.brasileirao.banco/databases/banco_brasileirao_2012, table = classificacao, query = SELECT id, imagemClube, nomeClube, pontos, jogos, vitorias, empates, derrotas, GP, GC, SG, aproveita
05-24 12:54:30.467: E/Cursor(274): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
05-24 12:54:30.467: E/Cursor(274): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
05-24 12:54:30.467: E/Cursor(274): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
05-24 12:54:30.467: E/Cursor(274): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
05-24 12:54:30.467: E/Cursor(274): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
05-24 12:54:30.467: E/Cursor(274): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
05-24 12:54:30.467: E/Cursor(274): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
05-24 12:54:30.467: E/Cursor(274): at br.projetoAplicado.android.brasileirao.banco.RepositorioClassi.getCursor(RepositorioClassi.java:45)
05-24 12:54:30.467: E/Cursor(274): at br.projetoAplicado.android.brasileirao.banco.RepositorioClassi.listaClassificacao(RepositorioClassi.java:53)
05-24 12:54:30.467: E/Cursor(274): at br.projetoAplicado.android.brasileirao.banco.ExibeClassi.onCreate(ExibeClassi.java:16)
05-24 12:54:30.467: E/Cursor(274): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-24 12:54:30.467: E/Cursor(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-24 12:54:30.467: E/Cursor(274): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-24 12:54:30.467: E/Cursor(274): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-24 12:54:30.467: E/Cursor(274): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-24 12:54:30.467: E/Cursor(274): at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 12:54:30.467: E/Cursor(274): at android.os.Looper.loop(Looper.java:123)
05-24 12:54:30.467: E/Cursor(274): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-24 12:54:30.467: E/Cursor(274): at java.lang.reflect.Method.invokeNative(Native Method)
05-24 12:54:30.467: E/Cursor(274): at java.lang.reflect.Method.invoke(Method.java:521)
05-24 12:54:30.467: E/Cursor(274): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-24 12:54:30.467: E/Cursor(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-24 12:54:30.467: E/Cursor(274): at dalvik.system.NativeStart.main(Native Method)
05-24 12:54:30.697: D/dalvikvm(274): GC_EXTERNAL_ALLOC freed 889 objects / 80760 bytes in 49ms
05-24 12:54:33.637: D/AndroidRuntime(274): Shutting down VM
05-24 12:54:33.637: W/dalvikvm(274): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-24 12:54:33.668: E/AndroidRuntime(274): FATAL EXCEPTION: main
05-24 12:54:33.668: E/AndroidRuntime(274): java.lang.NullPointerException
05-24 12:54:33.668: E/AndroidRuntime(274): at br.projetoAplicado.android.brasileirao.banco.ClassiListAdapter.getView(ClassiListAdapter.java:49)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.widget.AbsListView.obtainView(AbsListView.java:1294)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.widget.ListView.makeAndAddView(ListView.java:1727)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.widget.ListView.fillDown(ListView.java:652)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.widget.ListView.fillGap(ListView.java:623)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.os.Handler.handleCallback(Handler.java:587)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.os.Handler.dispatchMessage(Handler.java:92)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.os.Looper.loop(Looper.java:123)
05-24 12:54:33.668: E/AndroidRuntime(274): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-24 12:54:33.668: E/AndroidRuntime(274): at java.lang.reflect.Method.invokeNative(Native Method)
05-24 12:54:33.668: E/AndroidRuntime(274): at java.lang.reflect.Method.invoke(Method.java:521)
05-24 12:54:33.668: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-24 12:54:33.668: E/AndroidRuntime(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-24 12:54:33.668: E/AndroidRuntime(274): at dalvik.system.NativeStart.main(Native Method)
Minhas ClassiListAdapter
[code]package br.projetoAplicado.android.brasileirao.banco;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import br.projetoAplicado.android.brasileirao.banco.R;
public class ClassiListAdapter extends BaseAdapter {
private Context context;
private List lista;
public ClassiListAdapter(Context context, List lista){
this.context = context;
this.lista = lista;
}
public int getCount(){
return lista.size();
}
public Classificacao getItem(int position){
return lista.get(position);
}
public long getItemId(int position){
return position;
}
public View getView(int position, View viewReciclavel, ViewGroup parent){
ViewHolder holder;
if(viewReciclavel == null){
viewReciclavel = LayoutInflater.from(context).inflate(R.layout.classificacao, null);
holder = new ViewHolder();
holder.txtnomeClube = (TextView)viewReciclavel.findViewById(R.id.nomeClubeTab);
holder.txtJogos = (TextView)viewReciclavel.findViewById(R.id.jogosTab);
holder.txtPontos = (TextView)viewReciclavel.findViewById(R.id.pontosTab);
holder.txtVitorias = (TextView)viewReciclavel.findViewById(R.id.vitoriasTab);
holder.txtEmpates = (TextView)viewReciclavel.findViewById(R.id.empatesTab);
holder.txtDerrotas = (TextView)viewReciclavel.findViewById(R.id.derrotasTab);
holder.txtGC = (TextView)viewReciclavel.findViewById(R.id.gcTab);
holder.txtGP = (TextView)viewReciclavel.findViewById(R.id.gpTab);
holder.txtSG = (TextView)viewReciclavel.findViewById(R.id.sgTab);
holder.txtAproveitamento = (TextView)viewReciclavel.findViewById(R.id.aproveitamentoTab);
}else{
holder = (ViewHolder)viewReciclavel.getTag();
}
Classificacao c = getItem(position);
holder.txtnomeClube.setText(c.getNomeClube());
holder.txtPontos.setText(Integer.toString(c.getPontos()));
holder.txtJogos.setText(Integer.toString(c.getJogos()));
holder.txtVitorias.setText(Integer.toString(c.getVitorias()));
holder.txtEmpates.setText(Integer.toString(c.getEmpates()));
holder.txtDerrotas.setText(Integer.toString(c.getDerrotas()));
holder.txtGP.setText(Integer.toString(c.getGP()));
holder.txtGC.setText(Integer.toString(c.getGC()));
holder.txtSG.setText(Integer.toString(c.getSG()));
holder.txtAproveitamento.setText(String.valueOf(c.aproveitamento));
/*Classificacao c = lista.get(position);
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewReciclavel = inflater.inflate(R.layout.classificacao, null);
TextView nomeClube = (TextView)viewReciclavel.findViewById(R.id.nomeClubeTab);
nomeClube.setText(c.nomeClube);
TextView pontos = (TextView)viewReciclavel.findViewById(R.id.pontosTab);
pontos.setText(Integer.toString(c.pontos));
TextView jogos = (TextView)viewReciclavel.findViewById(R.id.jogosTab);
jogos.setText(Integer.toString(c.jogos));
TextView vitorias = (TextView)viewReciclavel.findViewById(R.id.vitoriasTab);
vitorias.setText(Integer.toString(c.vitorias));
TextView empates = (TextView)viewReciclavel.findViewById(R.id.empatesTab);
empates.setText(Integer.toString(c.empates));
TextView derrotas = (TextView)viewReciclavel.findViewById(R.id.derrotasTab);
derrotas.setText(Integer.toString(c.derrotas));
TextView gp = (TextView)viewReciclavel.findViewById(R.id.gpTab);
gp.setText(Integer.toString(c.GP));
TextView gc = (TextView)viewReciclavel.findViewById(R.id.gcTab);
gc.setText(Integer.toString(c.GC));
TextView sg = (TextView)viewReciclavel.findViewById(R.id.sgTab);
sg.setText(Integer.toString(c.SG));
TextView aproveitamento = (TextView)viewReciclavel.findViewById(R.id.aproveitamentoTab);
aproveitamento.setText(String.valueOf(c.aproveitamento));*/
return viewReciclavel;
}
public static class ViewHolder{
TextView txtnomeClube, txtPontos, txtJogos, txtVitorias, txtEmpates, txtDerrotas,
txtGP, txtGC, txtSG, txtAproveitamento;
}
}[/code]
Classe RepositorioClassi
[code]package br.projetoAplicado.android.brasileirao.banco;
import java.util.ArrayList;
import java.util.List;
import br.projetoAplicado.android.brasileirao.banco.Classificacao.Classificacoes;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
public class RepositorioClassi {
private static final String CATEGORIA = “Livro”;
//Nome do banco
private static final String NOME_BANCO = “banco_brasileirao_2012”;
//Nome da tabela
private static final String NOME_TABELA = “classificacao”;
private static String[] colunas = new String[] {"id","imagemClube","nomeClube","pontos",
"jogos","vitorias","empates","derrotas","GP","GC","SG","aproveitamento"};
protected SQLiteDatabase db;
public RepositorioClassi(Context ctx){
//Abre banco de dados existente
db = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);
}
protected RepositorioClassi(){
//Apenas para criar subclasse
}
//Atualiza o carro com os valores abaixo
//A claúsula where é utilizada para identificar o clube a ser atualizado
public int atualizar(ContentValues valores, String where, String[] whereArgs){
int count = db.update(NOME_TABELA, valores, where, whereArgs);
Log.i(CATEGORIA, "Atualizou [" + count + "] registros");
return count;
}
public Cursor getCursor(){
try{
//select * from classificacao
return db.query(NOME_TABELA, colunas, null, null, null, null, "pontos");
}catch(SQLException e){
Log.e(CATEGORIA, "Erro ao buscar os carros: " + e.toString());
return null;
}
}
public List<Classificacao> listaClassificacao(){
Cursor c = getCursor();
List<Classificacao> classi = new ArrayList<Classificacao>();
if(c.moveToFirst()){
int idxNomeClube = c.getColumnIndex(Classificacoes.NOMECLUBE);
int idxPontos = c.getColumnIndex(Classificacoes.PONTOS);
int idxJogos = c.getColumnIndex(Classificacoes.JOGOS);
int idxVitorias = c.getColumnIndex(Classificacoes.VITORIAS);
int idxEmpates = c.getColumnIndex(Classificacoes.EMPATES);
int idxDerrotas = c.getColumnIndex(Classificacoes.DERROTAS);
int idxGP = c.getColumnIndex(Classificacoes.GP);
int idxGC = c.getColumnIndex(Classificacoes.GC);
int idxSG = c.getColumnIndex(Classificacoes.SG);
int idxAproveitamento = c.getColumnIndex(Classificacoes.APROVEITAMENTO);
//loop até o final
do{
Classificacao classifi = new Classificacao();
classi.add(classifi);
//recupera os atributos da classificação
classifi.nomeClube = c.getString(idxNomeClube);
classifi.pontos = c.getInt(idxPontos);
classifi.jogos = c.getInt(idxJogos);
classifi.vitorias = c.getInt(idxVitorias);
classifi.empates = c.getInt(idxEmpates);
classifi.derrotas = c.getInt(idxDerrotas);
classifi.GP = c.getInt(idxGP);
classifi.GC = c.getInt(idxGC);
classifi.SG = c.getInt(idxSG);
classifi.aproveitamento = c.getDouble(idxAproveitamento);
}while(c.moveToNext());
}
return classi;
}
public void fechar(){
//Fecha o banco de dados
if(db != null){
db.close();
}
}
}[/code]
Classe RepositorioClassificacaoScript
[code]package br.projetoAplicado.android.brasileirao.banco;
import android.content.Context;
public class RepositorioClassificacaoScript extends RepositorioClassi {
//Script para fazer o drop na tabela
private static final String SCRIPT_DATABASE_DELETE = “DROP TABLE IF EXISTS classificacao”;
//Cria a tabela com o “id” sequencial
private static final String[] SCRIPT_DATABASE_CREATE = new String[]{
“create table classificacao(id integer primary key autoincrement,” +
“imagemClube blob, nomeClube text not null,pontos integer not null,” +
“jogos integer not null, vitorias integer not null, empates integer not null,” +
“derrotas integer not null, GP integer not null, GC integer not null,” +
“SG integer not null, aproveitamento double not null);”,
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Atlético-GO',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Atlético-MG',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Bahia',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Botafogo',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Corinthians',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Coritiba',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Cruzeiro',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Figueirense',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Flamengo',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Fluminense',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Gremio',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Internacional',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Naútico',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Palmeiras',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Ponte Preta',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Portuguesa',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Santos',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('São Paulo',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Sport',0,0,0,0,0,0,0,0,0);",
"insert into classificacao(nomeClube,pontos,jogos,vitorias,empates,derrotas," +
"GP,GC,SG,aproveitamento) values('Vasco',0,0,0,0,0,0,0,0,0);"};
//Nome do Banco
private static final String NOME_BANCO = "banco_brasileirao_2012";
//Controle de versao
private static final int VERSAO_BANCO = 1;
//Nome da Tabela
private static final String TABELA_CLASSIFICACAO = "classificacao";
//Classe utilitária para abrir, criar e atualizar o banco de dados
private SQLiteHelper dbHelper;
//Cria o banco de dados com script SQL
public RepositorioClassificacaoScript(Context ctx){
//criar utilizando um script SQL
dbHelper = new SQLiteHelper(ctx, RepositorioClassificacaoScript.NOME_BANCO,
RepositorioClassificacaoScript.VERSAO_BANCO, RepositorioClassificacaoScript.SCRIPT_DATABASE_CREATE,
RepositorioClassificacaoScript.SCRIPT_DATABASE_DELETE);
//Abre o banco no modo escrita para poder alterar também
db = dbHelper.getWritableDatabase();
}
//Fecha Banco
@Override
public void fechar(){
super.fechar();
if(dbHelper != null){
dbHelper.close();
}
}
}[/code]
Classe ExibeClassi
[code]package br.projetoAplicado.android.brasileirao.banco;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
public class ExibeClassi extends ListActivity {
public static RepositorioClassi repositorio;
private List classi;
private ClassiListAdapter ladapter;
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
repositorio = new RepositorioClassificacaoScript(this);
classi = repositorio.listaClassificacao();
ladapter = new ClassiListAdapter(this,classi);
setListAdapter(ladapter);
}
}[/code]
Se faltar alguma classe eu posto aqui…
No caso alterando para seu exemplo ocorreu o erro, o que está errado?
Obrigado