Autore Topic: startActivityForResult annidata è possibile?  (Letto 394 volte)

Offline Jason88

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
startActivityForResult annidata è possibile?
« il: 20 Gennaio 2012, 17:13:50 CET »
0
Salve io ho un activity 1 che chiama un activity2 con startActivityForResult() questa activity2 chiama un activity 3 con una startActivityForResult poi la 3 restituisce l'oggetto alla2 ma la 2 alla 1 no!  vi posto il codice:

prima activity:
Codice (Java): [Seleziona]
public class POI extends Activity implements Serializable {
       
        private static final int IMAGE_FROM_FOTO = 22;
        private static final String DATA_EXTRAS = "data";
        private String nomePOI;
        private String Descrizione;
        private Punto punto;
        private Vector<Foto> foto;
       
       
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.creazione_poi);
        autoCompletamento();
       
        Button bottonecamera = (Button) findViewById(R.id.camera_pag2);
        bottonecamera.setOnClickListener(new OnClickListener()
                        {
                                                int i=1;//imposta un valore per far capire all'activity foto che si fa scatta nuova foto e non sfoglia
                           
                                               @Override
                                           public void onClick(View v) {
                                                        startSubActivity(i) ;

                        }

                        });
       
        Button bottonesfoglia = (Button) findViewById(R.id.sfoglia_pag2);
        bottonesfoglia.setOnClickListener(new OnClickListener()
                        {
                                                int i=2;//imposta un valore per far capire all'activity foto che si fa  sfoglia
                            @Override
                                                        public void onClick(View v) {
                                                        startSubActivity(i) ;

                        }

                        });
       
        foto = (Vector<Foto>) getLastNonConfigurationInstance();
                if (foto != null) {
                        ImageView resultView = (ImageView) findViewById(R.id.imageview1);
                        resultView.setImageBitmap((foto.get(0)).getFoto());
                }
       

       
        Button bottoneindietro = (Button) findViewById(R.id.indietro);
        bottoneindietro.setOnClickListener(new OnClickListener()
                        {
                            @Override
                                                        public void onClick(View v) {
                                                        finish();

                        }

                        });
        }
       
       
       
        protected void startSubActivity(int i) {
                Intent intent = new Intent(POI.this, Foto.class);
                String pkg=getPackageName();
                intent.putExtra(pkg+".myInt", i);
            startActivityForResult(intent,IMAGE_FROM_FOTO);
               
        }
       
       


@Override
public void onActivityResult( int requestCode, int resultCode, Intent data ) {
       
    if (  requestCode == IMAGE_FROM_FOTO){
        switch (resultCode) {
       
                case RESULT_CANCELED:
                Toast toast = Toast.makeText(this,"Foto non acquisita", Toast.LENGTH_SHORT);
            toast.show();
           
            break;
               
                case RESULT_OK:
                       
                        Intent prova=getIntent(); // l'intent di questa activity
                        String pkg=getPackageName();
                        Foto f=(Foto)prova.getSerializableExtra(pkg+".myFoto");
                        ImageView resultView = (ImageView) findViewById(R.id.imageview1);
                        resultView.setImageBitmap(f.getFoto());
                       
                        break;
               
                default:
                        throw new IllegalArgumentException("ResultCode not valid");
               
        }
       
       
    }
   
}

@Override
public Object onRetainNonConfigurationInstance() {
        // Ritorniamo l'oggetto che rappresenta lo stato che intendiamo
        // mantenere
        // durante il riavvio dovuto alle modifiche di una applicazione. Nel
        // nostro
        // caso ritorniamo la picture
        return foto ;
}


}
       

adesso vi posto la seconda activity:
Codice (Java): [Seleziona]
public class Foto extends Activity implements Serializable {
       
        private static final int IMAGE_CAPTURE=10;
        private static final int IMAGE_FROM_GALLEY = 20;
        private static final String DATA_EXTRAS = "data";
       
        private String nome;
        private Bitmap foto;
       
       
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
               

                        foto = (Bitmap) getLastNonConfigurationInstance();
                        if (foto != null)
                        {
               
                                Foto nuova=new Foto();
                                nuova.setFoto(foto);
                       
                               
                                Intent provafoto=new Intent();
                        String pkg1=getPackageName();
                        provafoto.putExtra(pkg1+".myFoto", nuova);
                        setResult(Activity.RESULT_OK, provafoto);
                       
                        finish();
                               
                         
                        }
         
                        else{
                Intent intent=getIntent();
                String pkg=getPackageName();
                int i=intent.getIntExtra(pkg+".myInt", -1);
                if(i==1)
                        {
                                i=0;
                                scattaFoto();
                               
             
               
               
                               
                     
                        }
                else if(i==2)
                        {
                                sfoglia();
                        }
               
                        }
                       
                   
        }
       
        public Foto(){}
         
        @Override
        public Object onRetainNonConfigurationInstance() {
                // Ritorniamo l'oggetto che rappresenta lo stato che intendiamo
                // mantenere
                // durante il riavvio dovuto alle modifiche di una applicazione. Nel
                // nostro
                // caso ritorniamo la picture
                return foto;
        }
       
       
        public void scattaFoto(){

                Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(i, IMAGE_CAPTURE);
       
               
               
               
        }
       
        public void sfoglia(){
                Intent i = new Intent( Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI );
               
                startActivityForResult( i, IMAGE_FROM_GALLEY );
        }
       
       


       
        @Override
        public void onActivityResult( int requestCode, int resultCode, Intent data ) {
               
        if (  requestCode == IMAGE_CAPTURE ) {
               
               
                        switch (resultCode) {
               
                        case RESULT_CANCELED:
                        Toast toast = Toast.makeText(this,"Foto non fatta", Toast.LENGTH_SHORT);
                    toast.show();
                    finish();
                    break;
                       
                        case RESULT_OK:
                               
                               
                                foto = (Bitmap) data.getExtras().get(DATA_EXTRAS);
                       
                                Foto nuova=new Foto();
                                nuova.setFoto(foto);
                               
                                Intent provafoto=this.getIntent();
                        String pkg1=getPackageName();
                        provafoto.putExtra(pkg1+".myFoto", nuova);
                        setResult(Activity.RESULT_OK, provafoto);
                       
                   
                       
                        finish();
                               
                                break;
                       
                        default:
                                throw new IllegalArgumentException("ResultCode not valid");
                       
                }
        }    
       
        else  if (  requestCode == IMAGE_FROM_GALLEY ){
                 if ( resultCode == RESULT_CANCELED ) {
                Toast toast = Toast.makeText(this,"Foto non selezionata", Toast.LENGTH_SHORT);
                 toast.show();
                 finish();
                return;  
             }
               
               
               
             
        }  
               
}

}

 e questo è il logcat
Codice (Java): [Seleziona]
01-20 17:11:08.839: I/ApplicationPackageManager(1202): cscCountry is not German : TIM
01-20 17:11:09.679: I/ApplicationPackageManager(1202): cscCountry is not German : TIM
01-20 17:11:10.628: W/IInputConnectionWrapper(1202): showStatusIcon on inactive InputConnection
01-20 17:11:19.132: D/AndroidRuntime(1202): Shutting down VM
01-20 17:11:19.132: W/dalvikvm(1202): threadid=1: thread exiting with uncaught exception (group=0x40015578)
01-20 17:11:19.140: E/AndroidRuntime(1202): FATAL EXCEPTION: main
01-20 17:11:19.140: E/AndroidRuntime(1202): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10, result=-1, data=Intent { act=inline-data (has extras) }} to activity {io.provo.galaxy/io.provo.galaxy.Foto}: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = io.provo.galaxy.Foto)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityThread.access$2000(ActivityThread.java:117)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Looper.loop(Looper.java:123)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityThread.main(ActivityThread.java:3687)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.lang.reflect.Method.invokeNative(Native Method)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.lang.reflect.Method.invoke(Method.java:507)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at dalvik.system.NativeStart.main(Native Method)
01-20 17:11:19.140: E/AndroidRuntime(1202): Caused by: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = io.provo.galaxy.Foto)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Parcel.writeSerializable(Parcel.java:1176)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Parcel.writeValue(Parcel.java:1130)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Parcel.writeMapInternal(Parcel.java:488)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Bundle.writeToParcel(Bundle.java:1552)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Parcel.writeBundle(Parcel.java:502)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.content.Intent.writeToParcel(Intent.java:5635)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityManagerProxy.finishActivity(ActivityManagerNative.java:1459)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.Activity.finish(Activity.java:3251)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at io.provo.galaxy.Foto.onActivityResult(Foto.java:143)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.Activity.dispatchActivityResult(Activity.java:3908)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
01-20 17:11:19.140: E/AndroidRuntime(1202):     ... 11 more
01-20 17:11:19.140: E/AndroidRuntime(1202): Caused by: java.io.NotSerializableException: android.graphics.Bitmap
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
01-20 17:11:19.140: E/AndroidRuntime(1202):     at android.os.Parcel.writeSerializable(Parcel.java:1171)
01-20 17:11:19.140: E/AndroidRuntime(1202):     ... 21 more
01-20 17:11:30.398: I/Process(1202): Sending signal. PID: 1202 SIG: 9