2017-09-06 2 views
0

Voilà mon interface que je tendis à partir Serializable:java.io.NotSerializableException en passant par l'interface intent.putExtra

public interface InstaListener extends Serializable { 
    void onSuccess(String response); 
    void onFailure(int code, String reason); 
} 

Voilà comment je passe ce Listener entre deux activités:

InstaListener iListener = new InstaListener() { 
      @Override 
      public void onSuccess(String response) { 

      } 

      @Override 
      public void onFailure(int code, String reason) { 

      } 
     }; 

Intent intent = new Intent(activity, Insta.class); 
      intent.putExtra("email", email); 
      intent.putExtra("phone", phone); 
      intent.putExtra("purpose", purpose); 
      intent.putExtra("amount", amountstr); 
      intent.putExtra("name", name); 
      intent.putExtra("env", env); 
      intent.putExtra("listener", iListener); 
      activity.startActivity(intent); 

Voici comment je reçois l'auditeur dans la classe Insta.

instaListener = (InstaListener) getIntent().getSerializableExtra("listener"); 

J'ai cherché de nombreux messages mais rien explique pourquoi je reçois l'erreur: java.io.NotSerializableException

Toute aide?

Modifier Affichage l'exception et de la pile trace

FATAL EXCEPTION: main 
                   Process: instamojo.testapp, PID: 6785 
                   java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = instamojo.library.InstamojoPay$1) 
                    at android.os.Parcel.writeSerializable(Parcel.java:1527) 
                    at android.os.Parcel.writeValue(Parcel.java:1475) 
                    at android.os.Parcel.writeArrayMapInternal(Parcel.java:724) 
                    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408) 
                    at android.os.Bundle.writeToParcel(Bundle.java:1157) 
                    at android.os.Parcel.writeBundle(Parcel.java:764) 
                    at android.content.Intent.writeToParcel(Intent.java:8687) 
                    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3271) 
                    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1691) 
                    at android.app.Activity.startActivityForResult(Activity.java:4291) 
                    at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50) 
                    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79) 
                    at android.app.Activity.startActivityForResult(Activity.java:4249) 
                    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) 
                    at android.app.Activity.startActivity(Activity.java:4603) 
                    at android.app.Activity.startActivity(Activity.java:4563) 
                    at instamojo.library.InstamojoPay.initInstamojo(InstamojoPay.java:61) 
                    at instamojo.library.InstamojoPay.start(InstamojoPay.java:34) 
                    at instamojo.testapp.MainActivity.callInstamojoPay(MainActivity.java:58) 
                    at instamojo.testapp.MainActivity.access$000(MainActivity.java:17) 
                    at instamojo.testapp.MainActivity$1.onClick(MainActivity.java:39) 
                    at android.view.View.performClick(View.java:5669) 
                    at android.view.View$PerformClick.run(View.java:22549) 
                    at android.os.Handler.handleCallback(Handler.java:751) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:154) 
                    at android.app.ActivityThread.main(ActivityThread.java:6290) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
                    Caused by: java.io.NotSerializableException: instamojo.library.InstamojoPay 
                    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1224) 
                    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584) 
                    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549) 
                    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472) 
                    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218) 
                    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
                    at android.os.Parcel.writeSerializable(Parcel.java:1522) 
                    at android.os.Parcel.writeValue(Parcel.java:1475)  
                    at android.os.Parcel.writeArrayMapInternal(Parcel.java:724)  
                    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)  
                    at android.os.Bundle.writeToParcel(Bundle.java:1157)  
                    at android.os.Parcel.writeBundle(Parcel.java:764)  
                    at android.content.Intent.writeToParcel(Intent.java:8687)  
                    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3271)  
                    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1691)  
                    at android.app.Activity.startActivityForResult(Activity.java:4291)  
                    at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)  
                    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)  
                    at android.app.Activity.startActivityForResult(Activity.java:4249)  
                    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)  
                    at android.app.Activity.startActivity(Activity.java:4603)  
                    at android.app.Activity.startActivity(Activity.java:4563)  
                    at instamojo.library.InstamojoPay.initInstamojo(InstamojoPay.java:61)  
                    at instamojo.library.InstamojoPay.start(InstamojoPay.java:34)  
                    at instamojo.testapp.MainActivity.callInstamojoPay(MainActivity.java:58)  
                    at instamojo.testapp.MainActivity.access$000(MainActivity.java:17)  
                    at instamojo.testapp.MainActivity$1.onClick(MainActivity.java:39)  
                    at android.view.View.performClick(View.java:5669)  
                    at android.view.View$PerformClick.run(View.java:22549)  
                    at android.os.Handler.handleCallback(Handler.java:751)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:154)  
                    at android.app.ActivityThread.main(ActivityThread.java:6290)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
+0

Affichez l'exception complète et la trace de la pile dans votre question. – EJP

+0

Edité et ajouté exception et trace de la pile – user1051505

Répondre

1

Votre implémentation de la méthode locale de InstaListener est une classe interne de instamojo.library.InstamojoPay, ce qui est Serializable. Vous ne voulez probablement pas qu'il soit Serializable, donc la solution est d'écrire votre implémentation InstaListener en tant que classe imbriquée statique, au lieu d'une classe interne locale de méthode.

+0

Ceci l'a résolu. Problème: je ne peux pas accéder à getApplicationContext() à partir de la classe statique. J'ai besoin de mettre à jour un thread d'interface utilisateur sur le rappel. – user1051505

0

Vous avez une classe interne de instamojo.library.InstamojoPay, ce n'est pas sérialisable.

Pour éviter cette exception, ajoutez java.io.Serializable à votre classe interne ou ajouter transient mot-clé à votre déclaration d'objet de classe interne

+0

Je l'ai fait: classe publique InstamojoPay implémente Serializable - Il n'a pas aidé – user1051505

+0

@ user1051505 Il a aidé. Vous n'avez pas reçu le même message d'erreur. Vous avez rencontré une autre classe non sérialisable. Cependant faire tout en vue Serializable n'est pas la bonne réponse. – EJP