Olá pessoal,
estou com um problema que não sei resolver, a minha listview funciona perfeitamente no emulador do android studio, porem quando tento emular pelo celular a lista não aparece para mim ...
Alguém sabe o motivo? Agradeço desde já.
Olá pessoal,
estou com um problema que não sei resolver, a minha listview funciona perfeitamente no emulador do android studio, porem quando tento emular pelo celular a lista não aparece para mim ...
Alguém sabe o motivo? Agradeço desde já.
Olá João,
Você poderia postar se código aqui?
Qual tipo de layout você está usando? RelativeLayout ou LinearLayout?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ListaAlunos_lista_Alunos"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
</ListView>
<Button
android:id="@+id/ListaAlunos_btnAdicionar"
android:layout_width="56dp"
android:layout_height="56dp"
android:text="+"
android:textColor="#ffffff"
android:textSize="40sp"
android:elevation="8dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/lista_btn_adicionar"
android:stateListAnimator="@null"/>
</RelativeLayout>
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
public class ListaAlunosActivity extends AppCompatActivity {
private ListView listaAlunos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_alunos);
listaAlunos = (ListView)findViewById(R.id.ListaAlunos_lista_Alunos);
Button btnAdicionar = (Button) findViewById(R.id.ListaAlunos_btnAdicionar);
btnAdicionar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent irParaFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
startActivity(irParaFormulario);
}
});
registerForContextMenu(listaAlunos);
}
private void carregaLista() {
AlunoDao alunoDao = new AlunoDao(this);
List<Aluno> alunos = alunoDao.buscaAlunos();
alunoDao.close();
ArrayAdapter<Aluno> transformador = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
listaAlunos.setAdapter(transformador);
}
@Override
protected void onResume() {
super.onResume();
carregaLista();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
MenuItem deletar = menu.add("Deletar");
deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);
AlunoDao alunoDao = new AlunoDao(ListaAlunosActivity.this);
alunoDao.deletaAluno(aluno);
alunoDao.close();
Toast.makeText(ListaAlunosActivity.this, "Aluno " + aluno.getNome() + " deletado.", Toast.LENGTH_LONG).show();
return false;
}
});
}
}
Tente substituir a sua RelativeLayout por LinearLayout.
Na sua segunda linha você abre ela
<RelativeLayout ...>
Por
<LinearLayout ...>
Mas não esqueça de fechá-la também.
</RelativeLayout>
Por
</LinearLayout>
Olá, O problema é que se eu fizer isso uma hora o botão vai sumir da tela e eu não vou conseguir usa-lo.
O banco de dados do aparelho não possuirá os mesmos alunos salvos no banco de dados do emulador.
Para sua lista aparecer com os alunos, você precisará criar alunos novos no seu aparelho. Faça esse teste.
Sim eu já havia feito isto, o problema é que os alunos não aparecem, nem sinal da lista
Desinstala a aplicação do celular, e volta a instalar pelo Android Studio. Pode ser algum problema na versão do banco (aquele número que a gente especifica no SQLiteOpenHelper
, na classe AlunoDao
).
Pois é também tentei isso ...
Será que tem algo haver com a versão, o meu android é 5.1, API 22
Não tem a ver com versão do Android. Fica tranquilo.
Me mostra as classes FormularioActivity
, AlunoDao
e o XML do formulário.
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import johndeveloper.com.br.agendaalunos.ListaAlunosActivity;
import johndeveloper.com.br.agendaalunos.modelo.Aluno;
public class AlunoDao extends SQLiteOpenHelper {
public AlunoDao(Context context) {
super(context, "Agenda", null, 3);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY, " +
"nome TEXT NOT NULL, " +
"endereço TEXT, " +
"telefone TEXT, " +
"site TEXT, " +
"nota REAL);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "Drop table if exists Alunos";
db.execSQL(sql);
onCreate(db);
}
public void insereAluno(Aluno aluno) {
ContentValues dados = new ContentValues();
dados.put("nome", aluno.getNome());
dados.put("endereco", aluno.getEndereco());
dados.put("telefone", aluno.getTelefone());
dados.put("site", aluno.getSite());
dados.put("nota", aluno.getNota());
SQLiteDatabase db = getWritableDatabase();
db.insert("Alunos", null, dados);
}
public List<Aluno> buscaAlunos() {
String sql = "Select * from Alunos";
List<Aluno> alunos = new ArrayList<Aluno>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()){
Aluno aluno = new Aluno();
aluno.setId(cursor.getLong(cursor.getColumnIndex("id")));
aluno.setNome(cursor.getString(cursor.getColumnIndex("nome")));
aluno.setEndereco(cursor.getString(cursor.getColumnIndex("endereco")));
aluno.setTelefone(cursor.getString(cursor.getColumnIndex("telefone")));
aluno.setSite(cursor.getString(cursor.getColumnIndex("site")));
aluno.setNota(cursor.getDouble(cursor.getColumnIndex("nota")));
alunos.add(aluno);
}
cursor.close();
return alunos;
}
public void deletaAluno(Aluno aluno, Activity activity) {
SQLiteDatabase db = getWritableDatabase();
Toast.makeText(activity, "aluno " + aluno.getId().toString() + " - " + aluno.getNome(), Toast.LENGTH_LONG).show();
String[] alunoId = {aluno.getId().toString()};
db.delete("Alunos", "id = ?", alunoId);
}
}
a classe lista alunos e o xml dela estão logo acima,
Obrigado por estar me ajudando.
O engraçado é que eu fiz uns testes em outros emuladores teve alguns que não funcionaram.
O problema está aqui:
Na criação da sua tabela Alunos
, você chamou a coluna de endereço
. No entanto, ao listar e inserir um Aluno, você tenta acessar a coluna chamada endereco
(com C).
O SQLiteDatabase
, que é gerenciado pelo SQLiteOpenHelper
"engole" a exception gerada e, como resultado, sua aplicação continua funcionando como se nada tivesse acontecido, porém sem o Aluno criado.
Solução: troque sua coluna para endereco
e altere a versão do banco para 4, em:
public AlunoDao(Context context) {
super(context, "Agenda", null, 4);
}
Nossa Felipe,
rapaz que errinho feio rs, obrigado mesmo, funcionou.
Até mais,
Abraços.
Esse é o ruim de escrever em português coisas importantes assim rs.