2017-09-06 4 views
0

Hier ist meine Schnittstelle, die ich von Serializable erweitert:java.io.NotSerializableException während Schnittstelle durch intent.putExtra vorbei

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

Hier ist, wie ich diesen Zuhörer zwischen zwei Aktivitäten am vorbei:

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); 

Hier wie ich den Hörer in der Insta-Klasse empfange.

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

Ich habe viele Beiträge gesucht, aber nichts erklärt, warum ich den Fehler: java.io.NotSerializableException

Jede Hilfe?

bearbeiten Posting die Ausnahme und Stack-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

Veröffentlichen Sie die gesamte Ausnahme und Stack-Trace in Ihrer Frage. – EJP

+0

Edited & hinzugefügt Ausnahme und Stack-Trace – user1051505

Antwort

1

Ihre Methode lokale Implementierung von InstaListener ist eine innere Klasse von instamojo.library.InstamojoPay, die nicht Serializable ist. Wahrscheinlich möchten Sie nicht, dass es serialisierbar ist. Die Lösung besteht also darin, Ihre InstaListener Implementierung als eine statische geschachtelte Klasse anstelle einer internen Methodenklasse zu schreiben.

+0

Das hat es gelöst. Problem: Ich kann auf getApplicationContext() nicht innerhalb der statischen Klasse zugreifen. Ich muss einen UI-Thread beim Rückruf aktualisieren. – user1051505

0

Sie haben eine innere Klasse von instamojo.library.InstamojoPay, dann ist es nicht serialisierbar.

diese Ausnahme zu vermeiden, fügen Sie java.io.Serializable auf Ihre innere Klasse oder transient Stichwort zu Ihrer inneren Klasse Objektdeklaration hinzufügen

+0

Ich habe das: öffentliche Klasse InstamojoPay implementiert Serializable - Es hat nicht geholfen – user1051505

+0

@ user1051505 Es hat geholfen. Sie haben nicht dieselbe Fehlermeldung erhalten. Sie haben eine andere nicht serialisierbare Klasse gefunden. Aber alles in Sicht Serializable ist nicht die richtige Antwort. – EJP

Verwandte Themen