Autore Topic: Applicazione non funzionante  (Letto 858 volte)

Offline enrico_84

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SII
  • Sistema operativo:
    Windows 7
Applicazione non funzionante
« il: 31 Maggio 2013, 12:52:17 CEST »
0
Salve, quando lancio la mia app e clicco su un bottone, l'app in questione si chiude dandomi errore. Sul log cat tra i vari warning ci sono queste due righe in particolare:

05-30 10:59:03.584: E/AndroidRuntime(1830): Caused by: java.lang.ClassCastException: com.enrico.applicazioneContatto.Contatto cannot be cast to java.io.Serializable
05-30 10:59:03.584: E/AndroidRuntime(1830):    at com.enrico.applicazioneContatto.ApplicazioneContattoActivity.modifica(ApplicazioneContattoActivity.java:32)


qui invece vi posto il codice incriminato:

Codice (Java): [Seleziona]
package com.enrico.applicazioneContatto;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;
import java.io.Serializable;

public class ApplicazioneContattoActivity extends Activity implements Serializable{
   Contatto mioContatto;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_applicazione_contatto);
   
        mioContatto = new Contatto("Enrico", "Capone", "3335981580");
   
        TextView nome = (TextView) this.findViewById(R.id.campoNome);
        TextView cognome = (TextView) this.findViewById(R.id.campoCognome);
        TextView numero = (TextView) this.findViewById(R.id.campoNumero);
   
        nome.setText(mioContatto.getNome());
        cognome.setText(mioContatto.getCognome());
        numero.setText(mioContatto.getNumeroTelefono());
    }
   
    public void modifica(View button) {
       Intent intent = new Intent(this, ModificaContattoActivity.class);
       String pkg = getPackageName();
       intent.putExtra(pkg+".mioContatto", (Serializable)mioContatto);
       startActivityForResult(intent, 0);
    }
   
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       if(resultCode == RESULT_OK) {
          String pkg = getPackageName();
          mioContatto = (Contatto) data.getSerializableExtra(pkg + ".nuovoContatto");
         
          TextView nome = (TextView) this.findViewById(R.id.campoNome);
          TextView cognome = (TextView) this.findViewById(R.id.campoCognome);
          TextView numero = (TextView) this.findViewById(R.id.campoNumero);
         
          nome.setText(mioContatto.getNome());
          cognome.setText(mioContatto.getCognome());
          numero.setText(mioContatto.getNumeroTelefono());
        }
    }
   
}

Sapete indicarmi dove sbaglio? Grazie :)

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Applicazione non funzionante
« Risposta #1 il: 31 Maggio 2013, 13:47:15 CEST »
0
Sapete indicarmi dove sbaglio? Grazie :)

Basta leggere con attenzione il messaggio d'errore:

Citazione
05-30 10:59:03.584: E/AndroidRuntime(1830): Caused by: java.lang.ClassCastException: com.enrico.applicazioneContatto.Contatto cannot be cast to java.io.Serializable

La tua classe "Contatto" non implementa interfaccia "Serializable", quindi non può essere utilizzata nel metodo "putExtra", fare un cast non aggiunge magicamente l'interfaccia, deve essere fatta esplicitamente.

La tua classe deve implementare Serializable:

Serializable | Android Developers

deve avere un suo "serialVersionUID" univoco, Eclipse permette di interfacciarsi al generatore del JDK.
adb logcat | tee /tmp/logcat | grep TAG

Offline enrico_84

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SII
  • Sistema operativo:
    Windows 7
Re:Applicazione non funzionante
« Risposta #2 il: 31 Maggio 2013, 14:01:15 CEST »
0
Off-Topic:
La tua classe deve implementare Serializable:

La classe ApplicazioneContattoActivity già implementa Serializable. Ma stai parlando forse della classe Contatto(dove ho inserito il costruttore)?

Off-Topic:
deve avere un suo "serialVersionUID" univoco, Eclipse permette di interfacciarsi al generatore del JDK.
E come faccio? Scusate ma sono nuovo di Android, sono ancora un pò inesperto e non ho capito come e perchè inserire questo serialVersionUID

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Applicazione non funzionante
« Risposta #3 il: 31 Maggio 2013, 14:48:47 CEST »
+1
Il nome della classe è "Contatto" viene chiaramente scritto nel messaggio d'errore (consiglio di abituarsi a leggere e soprattutto comprendere i messaggi d'errore).

L'uso di Serializable non è di Android ma fa parte del linguaggio Java, la documentazione spiega come funziona:

http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html

deve essere aggiunto nella dichiarazione della classe:

Codice (Java): [Seleziona]
class Contatto implements Serializable {
...
}

il compilatore ti avviserà, e sarà riportato dal IDE, la mancanza del serialVersionUID, lo puoi ignorare e lo fai generare da Eclipse in automatico.
adb logcat | tee /tmp/logcat | grep TAG

Offline enrico_84

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SII
  • Sistema operativo:
    Windows 7
Re:Applicazione non funzionante
« Risposta #4 il: 01 Giugno 2013, 18:36:23 CEST »
0
Fatto, l'app funziona correttamente. Grazie  ;-)