Eu estou com o seguinte problema, eu seleciono um aluno para editá-lo, tiro uma foto e salvo, até ai tudo bem, quando volto da câmera para o formulário do aluno a sua respectiva foto está visível, mas quando eu clico em salvar e volto para o aluno que havia editado, a sua foto não está lá.
Vou colocar meus códigos abaixo para que vocês possam ver, espero que tenham alguma dica, ficarei muito agradecido.
Código do Cadastro:
package com.example.cadastrocaelum;
public class Cadastro extends Activity {
private AlunoDAO db;
private FormHelper helper;
private Aluno alunoAlterar;
private ImageView imagemFoto;
private String caminhofoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cadastro);
alunoAlterar = (Aluno) getIntent().getSerializableExtra("AlunoAlterado");
if (alunoAlterar!=null){
helper = new FormHelper(Cadastro.this);
helper.EditaCampos(alunoAlterar);
}
Button btncadastra = (Button) findViewById(R.id.cadastro_botao2);
Button btnvolta = (Button) findViewById(R.id.cadastro_botao1);
imagemFoto = (ImageView) findViewById(R.id.cadastro_foto);
imagemFoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
caminhofoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis()+".jpg";
Uri caminho = Uri.fromFile(new File (caminhofoto));
Intent abreCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
abreCamera.putExtra(MediaStore.EXTRA_OUTPUT, caminho);
startActivity(abreCamera);
startActivityForResult(abreCamera, 123);
}
});
btncadastra.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
helper = new FormHelper(Cadastro.this);
db = new AlunoDAO(Cadastro.this);
Aluno aluno = helper.getAluno();
if (alunoAlterar==null){
db.insere(aluno);
Intent voltar = new Intent(Cadastro.this, Listagem.class);
startActivity(voltar);
Toast.makeText(Cadastro.this, "Aluno "+aluno.getNome() + " Cadastrado!", Toast.LENGTH_LONG).show();
db.close();
finish();
}else{
aluno.setId(alunoAlterar.getId());
db.edita(aluno);
Intent voltar = new Intent(Cadastro.this, Listagem.class);
startActivity(voltar);
Toast.makeText(Cadastro.this, "Aluno "+aluno.getNome() +" Editado!", Toast.LENGTH_LONG).show();
db.close();
finish();
}
}
});
btnvolta.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent voltar = new Intent(Cadastro.this, Listagem.class);
startActivity(voltar);
finish();
}
});
}
public ImageView pegaFoto(){
return imagemFoto;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==123){
if (resultCode == Activity.RESULT_OK){
helper.carregaFoto(caminhofoto);
}else{
this.caminhofoto=null;
}
}
}
}
Código do AlunoDAO
package com.example.cadastrocaelum;
public class AlunoDAO extends SQLiteOpenHelper{
public AlunoDAO(Context context) {
super(context, NOME, null, VERSION);
}
private static String NOME = "AlunoTable";
private static int VERSION =2;
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS "+ NOME + " (id INTEGER PRIMARY KEY, "
+ "nome TEXT UNIQUE NOT NULL, "
+ "telefone TEXT, "
+ "endereco TEXT, "
+ "site TEXT, "
+ "nota REAL, "
+ "destinofoto TEXT"
+");";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + NOME + ";";
db.execSQL(sql);
onCreate(db);
}
public ContentValues valores(Aluno aluno) {
ContentValues cv = new ContentValues();
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("destinofoto", aluno.getDestinofoto());
return cv;
}
public void insere(Aluno aluno){
getWritableDatabase().insert(NOME, null, valores(aluno));
}
public List<Aluno> getLista() {
List<Aluno> alunos = new ArrayList<Aluno>();
String sql = "SELECT * FROM "+NOME+";";
Cursor c = getReadableDatabase().rawQuery(sql, null);
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.setDestinofoto(c.getString(c.getColumnIndex("destinofoto")));
alunos.add(aluno);
}
c=null;
return alunos;
}
public void deletar(Aluno aluno) {
String[] args = {String.valueOf(aluno.getId())};
getWritableDatabase().delete(NOME, "id=?", args);
}
public void edita(Aluno alunoalterado) {
String[] args = {String.valueOf(alunoalterado.getId())};
ContentValues cv = new ContentValues();
cv.put("nome", alunoalterado.getNome());
cv.put("telefone", alunoalterado.getTelefone());
cv.put("endereco", alunoalterado.getEndereco());
cv.put("site", alunoalterado.getSite());
cv.put("nota", alunoalterado.getNota());
cv.put("destinofoto", alunoalterado.getDestinofoto());
getWritableDatabase().update(NOME, cv, "id=?", args);
}
}
Código do FormHelper
package com.example.cadastrocaelum;
private EditText campoNome;
private EditText campoEndereco;
private EditText campoSite;
private EditText campoTelefone;
private ProgressBar campoNota;
private Aluno aluno;
private ImageView campoFoto;
public FormHelper(Cadastro activity){
aluno = new Aluno();
campoNome = (EditText) activity.findViewById(R.id.cadastro_nome);
campoEndereco = (EditText) activity.findViewById(R.id.cadastro_endereco);
campoSite = (EditText) activity.findViewById(R.id.cadastro_site);
campoTelefone = (EditText) activity.findViewById(R.id.cadastro_telefone);
campoNota = (SeekBar) activity.findViewById(R.id.cadastro_nota);
campoFoto = (ImageView) activity.findViewById(R.id.cadastro_foto);
}
public Aluno getAluno(){
String Nome = campoNome.getText().toString();
String Endereco = campoEndereco.getText().toString();
String Site = campoSite.getText().toString();
String Telefone = campoTelefone.getText().toString();
int Nota = campoNota.getProgress();
aluno.setNome(Nome);
aluno.setEndereco(Endereco);
aluno.setSite(Site);
aluno.setTelefone(Telefone);
aluno.setNota(Double.valueOf(Nota));
return aluno;
}
public void EditaCampos(Aluno alunoAlter){
campoNome.setText(alunoAlter.getNome());
campoEndereco.setText(alunoAlter.getEndereco());
campoSite.setText(alunoAlter.getSite());
campoTelefone.setText(alunoAlter.getTelefone());
campoNota.setProgress(alunoAlter.getNota().intValue());
if (alunoAlter.getDestinofoto() != null ){
carregaFoto(aluno.getDestinofoto());
}
}
public void carregaFoto(String caminhofoto) {
Bitmap foto = BitmapFactory.decodeFile(caminhofoto);
Bitmap fotoredux = Bitmap.createScaledBitmap(foto, 100, 100, true);
aluno.setDestinofoto(caminhofoto);
campoFoto.setImageBitmap(fotoredux);
}
}
Eu percebi que toda a vez que vou criar um aluno e imediantamente tirar uma foto para ele, a aplicação para com as seguintes entradas no logcat:
12-04 03:40:30.289: E/AndroidRuntime(2431): FATAL EXCEPTION: main
12-04 03:40:30.289: E/AndroidRuntime(2431): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=123, result=-1, data=null} to activity {com.example.cadastrocaelum/com.example.cadastrocaelum.Cadastro}: java.lang.NullPointerException
Se alguém puder ajudar, será de grande ajuda