Esta dando problemas ao iniciar o aplicativo, o que esta impedindo de continuar o curso, pois os demais exercícios dependem que esteja rodando. estou com muita dificuldade de descobrir o erro
02-12 15:01:34.126: W/dalvikvm(1062): threadid=1: thread exiting with uncaught exception (group=0xb3a22ba8)
02-12 15:01:34.136: E/AndroidRuntime(1062): FATAL EXCEPTION: main
02-12 15:01:34.136: E/AndroidRuntime(1062): Process: br.com.caelum.cadastro, PID: 1062
02-12 15:01:34.136: E/AndroidRuntime(1062): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.caelum.cadastro/br.com.caelum.cadastro.ListaAlunosActivity}: java.lang.NullPointerException
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.os.Handler.dispatchMessage(Handler.java:102)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.os.Looper.loop(Looper.java:136)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.ActivityThread.main(ActivityThread.java:5001)
02-12 15:01:34.136: E/AndroidRuntime(1062): at java.lang.reflect.Method.invokeNative(Native Method)
02-12 15:01:34.136: E/AndroidRuntime(1062): at java.lang.reflect.Method.invoke(Method.java:515)
02-12 15:01:34.136: E/AndroidRuntime(1062): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
02-12 15:01:34.136: E/AndroidRuntime(1062): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
02-12 15:01:34.136: E/AndroidRuntime(1062): at dalvik.system.NativeStart.main(Native Method)
02-12 15:01:34.136: E/AndroidRuntime(1062): Caused by: java.lang.NullPointerException
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.Activity.registerForContextMenu(Activity.java:2911)
02-12 15:01:34.136: E/AndroidRuntime(1062): at br.com.caelum.cadastro.ListaAlunosActivity.onCreate(ListaAlunosActivity.java:37)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.Activity.performCreate(Activity.java:5231)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-12 15:01:34.136: E/AndroidRuntime(1062): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
02-12 15:01:34.136: E/AndroidRuntime(1062): ... 11 more
package br.com.caelum.cadastro;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import br.com.caelum.cadastro.adapter.ListaAlunosAdapter;
import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.cadastro.modelo.Aluno;
public class ListaAlunosActivity extends Activity{
private ListView listViewAlunos;
private Aluno alunoSelecionado;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.item);
//fazendo a ponte entre XML e Java, e o devido Cast
listViewAlunos= (ListView) findViewById(R.id.lista);
registerForContextMenu(listViewAlunos);
Toast.makeText(ListaAlunosActivity.this,"Iniciou o aplicativo", Toast.LENGTH_LONG).show();
listViewAlunos.setOnItemClickListener( new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapter, View view, int posicao, long id) {
Aluno alunoParaSerAlterado = (Aluno) adapter.getItemAtPosition(posicao);
Intent edicao = new Intent(ListaAlunosActivity.this,FormularioActivity.class);
//Enviando pelo PutExtra
edicao.putExtra(Extras.ALUNO_SELECIONADO,alunoParaSerAlterado);
startActivity(edicao);
}
});
listViewAlunos.setOnItemLongClickListener(new OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view, int posicao, long id)
{
//Toast.makeText(ListaAlunosActivity.this, "Aluno clicado: "+alunos[posicao], Toast.LENGTH_SHORT).show();
alunoSelecionado = (Aluno) adapter.getItemAtPosition(posicao);
return false;
}
});
} // onCreate
private void carregaLista(){
AlunoDAO alunoDAO = new AlunoDAO(this);
//pegar alunos do banco ou seja do DAO
//getLista() tem um retorno do tipo List<Aluno> então temos que criar a variável desse tipo para receber o retorno
List<Aluno> listAlunos=alunoDAO.getLista();
if (listAlunos.isEmpty())
Toast.makeText(ListaAlunosActivity.this,"Nenhum aluno cadastrado", Toast.LENGTH_LONG).show();
//Criando o adpter para passar o array do Java para android
//ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this,android.R.layout.simple_list_item_1, listAlunos);
// Associar o adpter criado para o LIstView
ListaAlunosAdapter adapter = new ListaAlunosAdapter(this,listAlunos);
listViewAlunos.setAdapter(adapter);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
this.carregaLista();
}
//Importando Menu XML
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_lista_alunos, menu);
return super.onCreateOptionsMenu(menu);
}
//Comportamento ao clicalr
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.novo:
Intent irParaFormulario = new Intent(this,FormularioActivity.class);
startActivity(irParaFormulario);
return false;
case R.id.mapa:
Intent intentMapa = new Intent(Intent.ACTION_VIEW);
intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+alunoSelecionado.getEndereco()));
startActivity(intentMapa);
return false;
default:
}
return super.onOptionsItemSelected(item);
}
// Menu suspenso
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
// criando menu programaticamente
// Não esquecer de registrar a lista para ter um menu de contexto
MenuItem ligar = menu.add(0,0,0,"Ligar");
// Intent intentLigar = new Intent(Intent.ACTION_CALL);
Intent intentLigar = new Intent(Intent.ACTION_DIAL);
intentLigar.setData(Uri.parse("tel:"+alunoSelecionado.getTelefone()));
ligar.setIntent(intentLigar);
MenuItem SMS = menu.add("Enviar SMS");
Intent intentSMS = new Intent(Intent.ACTION_VIEW);
intentSMS.setData(Uri.parse("sms:"+alunoSelecionado.getTelefone()));
intentSMS.putExtra("sms_body"," Olá sou o Douglas Raphael, retornarei a ligação assim que possível");
SMS.setIntent(intentSMS);
// MenuItem mapa = menu.add("Achar no Mapa");
/* mapa.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intentMapa = new Intent(Intent.ACTION_VIEW); intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+alunoSelecionado.getEndereco()));
setIntent(intentMapa);
startActivity(intentMapa);
return false;
}
});
*/
MenuItem mapa = menu.add("Achar no Mapa");
Intent intentMapa = new Intent(Intent.ACTION_VIEW); intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+alunoSelecionado.getEndereco()));
mapa.setIntent(intentMapa);
MenuItem site = menu.add("Navegar no site");
Intent intentSite = new Intent(Intent.ACTION_VIEW);
String http = alunoSelecionado.getSite().startsWith("http://")?"":"http://";
intentSite.setData(Uri.parse(http+alunoSelecionado.getSite()));
site.setIntent(intentSite);
MenuItem deletar = menu.add("Deletar");
deletar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
dao.deletar(alunoSelecionado);
dao.close();
carregaLista();
return false;
}
});
MenuItem email = menu.add(0,5,0, "Enviar E-mail");
Intent intentEmail = new Intent(Intent.ACTION_SEND);
intentEmail.setType("message/rfc822");
intentEmail.putExtra(Intent.EXTRA_EMAIL,
new String[] { "caelum@caelum.com.br" });
intentEmail.putExtra(Intent.EXTRA_SUBJECT, "Elogios do curso de android");
intentEmail.putExtra(Intent.EXTRA_TEXT, "Este curso é ótimo!!!");
email.setIntent(intentEmail);
MenuItem emailOP = menu.add(0,5,0, "Enviar E-mail ,...");
email.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intentEmail = new Intent(Intent.ACTION_SEND);
intentEmail.setType("message/rfc822");
intentEmail.putExtra(Intent.EXTRA_EMAIL,
new String[] { "caelum@caelum.com.br" });
intentEmail.putExtra(Intent.EXTRA_SUBJECT, "Elogios do curso de android");
intentEmail.putExtra(Intent.EXTRA_TEXT, "Este curso é ótimo!!!");
startActivity(Intent.createChooser(intentEmail, "Selecione a sua aplicação de email!"));
return false;
}
});
/*
MenuItem compartilhar = menu.add(0,5,0, "Compartilhar...");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "assunto do que será compartilhado");
intent.putExtra(Intent.EXTRA_TEXT, "texto do que será compartilhado");
startActivity(Intent.createChooser(intent, "Escolha como compartilhar"));
*/
super.onCreateContextMenu(menu, v, menuInfo);
}
}
package br.com.caelum.cadastro;
import java.io.File;
import java.io.Serializable;
import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.cadastro.modelo.Aluno;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.Toast;
public class FormularioActivity extends Activity{
protected static final int BATER_FOTO = 123;
//Vamos criar o FormularioHelper para facilitar o trabalho de extrair os dados do Aluno dos campos.
FormularioHelper helper;
private String localArquivoFoto;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.formulario);
final Button btInserir = (Button) findViewById(R.id.botao);
helper=new FormularioHelper(this);
final Aluno alunoParaSerAlterado = (Aluno)getIntent().getSerializableExtra(Extras.ALUNO_SELECIONADO);
if (alunoParaSerAlterado!=null){
helper.colocaAlunoNoFormulario(alunoParaSerAlterado);
btInserir.setText("Alterar");
}
Toast.makeText(this, "Aluno: "+alunoParaSerAlterado,Toast.LENGTH_SHORT).show();
btInserir.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// pegaAlunoDoFormulario() return
Aluno aluno=helper.pegaAlunoDoFormulario();
AlunoDAO alunoDAO = new AlunoDAO(FormularioActivity.this);
if(alunoParaSerAlterado !=null){
aluno.setId(alunoParaSerAlterado.getId());
alunoDAO.atualizar(aluno);
}
else{
alunoDAO.insere(aluno);
}
alunoDAO.close();
Toast.makeText(FormularioActivity.this, "Objeto aluno criado",Toast.LENGTH_SHORT).show();
finish();
}
});//Onclick
ImageView foto = helper.getCampoFoto();
foto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
localArquivoFoto=getExternalFilesDir(null)+"/"+System.currentTimeMillis()+".jpg";
File arquivo = new File(localArquivoFoto);
Uri localFoto=Uri.fromFile(arquivo);
Intent irParaCamera=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
irParaCamera.putExtra(MediaStore.EXTRA_OUTPUT, localFoto);
startActivityForResult(irParaCamera,BATER_FOTO);
}
});
}
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
if (requestCode == BATER_FOTO) {
if (resultCode == Activity.RESULT_OK) {
helper.carregaImagem(this.localArquivoFoto);
} else {
this.localArquivoFoto = null;
}
}
}
}
package br.com.caelum.cadastro;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RatingBar;
import br.com.caelum.cadastro.modelo.Aluno;
public class FormularioHelper {
private EditText campoNome;
private EditText campoEndereco;
private EditText campoSite;
private EditText campoTelefone;
private RatingBar campoNota;
private ImageView campoFoto;
private Aluno aluno;
//OnCreate, poderia fazer em outro método qualquer
public FormularioHelper(FormularioActivity active)
{
aluno=new Aluno();
// Fazendo a "ponte" entre o Java e android
campoNome = (EditText) active.findViewById(R.id.nome);
campoEndereco = (EditText) active.findViewById(R.id.endereco);
campoSite = (EditText) active.findViewById(R.id.site);
campoTelefone = (EditText) active.findViewById(R.id.telefone);
campoNota = (RatingBar) active.findViewById(R.id.nota);
setCampoFoto((ImageView) active.findViewById(R.id.foto));
}
public Aluno pegaAlunoDoFormulario(){
aluno.setNome(campoNome.getText().toString());
aluno.setTelefone(campoTelefone.getText().toString());
aluno.setEndereco(campoEndereco.getText().toString());
aluno.setSite(campoSite.getText().toString());
aluno.setNota(Double.valueOf(campoNota.getRating()));
return aluno;
}
public void colocaAlunoNoFormulario(Aluno alunoParaSerAlterado) {
campoNome.setText(alunoParaSerAlterado.getNome());
campoSite.setText(alunoParaSerAlterado.getSite());
campoEndereco.setText(alunoParaSerAlterado.getEndereco());
campoNota.setRating(alunoParaSerAlterado.getNota().floatValue());
campoTelefone.setText(alunoParaSerAlterado.getTelefone());
if(alunoParaSerAlterado.getCaminhoFoto()!=null){
this.carregaImagem(alunoParaSerAlterado.getCaminhoFoto());
}
}
public void carregaImagem(String localArquivoFoto) {
Bitmap imagemFoto = BitmapFactory.decodeFile(localArquivoFoto);
Bitmap imagemFotoReduzida = Bitmap.createScaledBitmap(imagemFoto, 100, 100, true);
aluno.setCaminhoFoto(localArquivoFoto);
getCampoFoto().setImageBitmap(imagemFotoReduzida);
}
public ImageView getCampoFoto() {
return campoFoto;
}
public void setCampoFoto(ImageView campoFoto) {
this.campoFoto = campoFoto;
}
}
public class AlunoDAO extends SQLiteOpenHelper {
private static final String DATABASE = "NomeDoBanco";
private static final int VERSAO = 6;
private static final String TABELA="Alunos";
public AlunoDAO(Context ctx) {
super(ctx, DATABASE, null, VERSAO);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql ="CREATE TABLE " + TABELA +
" (id INTEGER PRIMARY KEY , "
+ " nome TEXT UNIQUE NOT NULL, "
+ " telefone TEXT, "
+ " endereco TEXT, "
+ " site TEXT, "
+ " nota REAL, "
+ "caminhoFoto TEXT "
+ ");";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
String sql ="DROP TABLE IF EXISTS "+ TABELA;
db.execSQL(sql);
onCreate(db);
}
public void insere(Aluno aluno) {
ContentValues cv = new ContentValues();
// nome da coluna
//cv.put("id", aluno.getId());
cv.put("nome", aluno.getNome());
cv.put("telefone", aluno.getTelefone());
cv.put("endereco", aluno.getEndereco());
cv.put("site", aluno.getSite());
cv.put("nota", aluno.getNota());
cv.put("caminhofoto", aluno.getCaminhoFoto());
// Não esta recebendo o database para poder manipular
getWritableDatabase().insert(TABELA, null, cv);
}
public List<Aluno> getLista() {
List<Aluno> listaDeAlunos = new ArrayList<Aluno>();
String sql ="Select * from " + TABELA + ";";
//
Cursor c = getReadableDatabase().rawQuery(sql, null);
if(null != c)
if(c.getCount() > 0)
{
while(c.moveToNext())
{
Aluno aluno = new Aluno();
aluno.setId(c.getLong(c.getColumnIndex("id")));
aluno.setNome(c.getString(c.getColumnIndex("nome")));
aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
aluno.setSite(c.getString(c.getColumnIndex("site")));
aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
listaDeAlunos.add(aluno);
}
}
return listaDeAlunos;
}
public void deletar(Aluno aluno) {
String[] args={aluno.getId().toString()};
getWritableDatabase().delete("Alunos", "id=?", args);
}
public void atualizar(Aluno aluno) {
ContentValues cv = new ContentValues();
// nome da coluna
//cv.put("id", aluno.getId());
cv.put("nome", aluno.getNome());
cv.put("telefone", aluno.getTelefone());
cv.put("endereco", aluno.getEndereco());
cv.put("site", aluno.getSite());
cv.put("nota", aluno.getNota());
cv.put("caminhofoto", aluno.getCaminhoFoto());
String[]args ={aluno.getId().toString()};
getWritableDatabase().update("Alunos", cv, "id=?",args);
}
}
public class Aluno implements Serializable {
private Long id;
private String nome;
private String telefone;
private String endereco;
private String site;
private String caminhoFoto;
private Double nota;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Double getNota() {
return nota;
}
public void setNota(Double nota) {
this.nota = nota;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getCaminhoFoto() {
return caminhoFoto;
}
public void setCaminhoFoto(String caminhoFoto) {
this.caminhoFoto = caminhoFoto;
}
@Override
public String toString() {
return id + "." + nome;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@color/linha_impar"
>
<ImageView android:id="@+id/foto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:background="@color/borda_imagem"
/>
<TextView android:id="@+id/nome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
public class ListaAlunosAdapter extends BaseAdapter {
private final List<Aluno> listAlunos;
private Activity activity;
public ListaAlunosAdapter(Activity activity,List<Aluno> listAlunos) {
this.listAlunos = listAlunos;
this.activity=activity;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listAlunos.size();
}
@Override
public Object getItem(int posicao) {
return listAlunos.get(posicao);
}
@Override
public long getItemId(int posicao) {
// TODO Auto-generated method stub
return listAlunos.get(posicao).getId();
}
@Override
public View getView(int posicao, View arg1, ViewGroup arg2) {
Aluno aluno = listAlunos.get(posicao);
View view = activity.getLayoutInflater().inflate(br.com.caelum.cadastro.R.layout.item, null);
if (posicao % 2 == 0) {
view.setBackgroundColor(activity.getResources().
getColor(br.com.caelum.cadastro.R.color.linha_par));
}
Bitmap bm;
TextView nome = (TextView) view.findViewById(br.com.caelum.cadastro.R.id.nome);
nome.setText(aluno.toString());
if (aluno.getCaminhoFoto() != null) {
bm = BitmapFactory.decodeFile(aluno.getCaminhoFoto());
}
else
{
bm = BitmapFactory.decodeResource(activity.getResources(),br.com.caelum.cadastro.R.drawable.ic_no_image);
}
bm = Bitmap.createScaledBitmap(bm, 100, 100, true);
ImageView foto =(ImageView) view.findViewById(br.com.caelum.cadastro.R.id.foto);
foto.setImageBitmap(bm);
return view;
}
}
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="borda_imagem">#BABABA</color>
<color name="linha_par">#33FFFF</color>
<color name="linha_impar">#96FAFA</color>
</resources>
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Chegou um SMS!!!", Toast.LENGTH_LONG).show();
}
}