2017-04-09 9 views
0

私はバックエンドサービスとしてバックエンドサービスを使用していますが、ユーザの保存と取得にはBackendlessUserというクラスがあります。私は、余分なSerializableとしてそれを渡すことで、Androidの上の2つのアクティビティの間でユーザーを渡すためにしようとしている:クラスBackendlessUserSerializableを実装シリアライズ可能クラスの使用方法

Intent intent = new Intent(PeopleActivity.this, ConversationActivity.class); 
intent.putExtra("withUser", contacts.get(position)); 
startActivity(intent); 

ので。しかし、私はそれを実行すると、それは私に、このエラーを与える:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.backendless.BackendlessUser) 
at android.os.Parcel.writeSerializable(Parcel.java:1468) 
at android.os.Parcel.writeValue(Parcel.java:1416) 
.... 
Caused by: java.io.NotSerializableException: java.lang.Object 
.... 

ために、私が思うに、この変数:

public final class BackendlessUser implements Serializable { 
    private final Map<String, Object> properties = new HashMap<String, Object>(); 
... 

は、どのように私はBackendlessUserクラスを変更できないことを考えると、この問題を解決することができますか?

答えて

1

オブジェクトを渡す代わりに、アクティビティ間で利用できるように、オブジェクトへの参照をシングルトンで保存することができます。

Applicationクラスを拡張して保存することができます。 Applicationクラスは、アプリケーションの実行中は常に存在し、シングルトンです。その後

public class MyApp extends Application { 
    public BackendUser currentUser; 
} 

:あなたは活動の間でオブジェクトを渡すためにParcelableを使用する必要があります

((MyApp)getApplication()).currentUser 
+0

オク、提案ありがとう –

2

Parcelableは、Serializableと比べてパフォーマンスが優れています。あなたがマップオブジェクトにParcelableを使用する必要がある場合、take a look at this answer

また、それを実装する方法についての説明については、see this answer

編集:Objectは、あなたも、アレキサンダーの答えをフォローしたい、またはかもしれませんがないParcelableであるため、データを永続化するためにデータベースを使用すること

+1

私はBackendlessUserクラスを変更できないと考えて、どうすればこの問題を解決できますか?* – Blackbelt

+0

はい、しかし、彼はそこに彼のクラスを保存しようとしていますか? –

0

ParcelableはAndroidのバージョンがSerializableなので、それを使用します。 Parcelablehereについて詳しくは、こちらをご覧ください。

バックエンドユーザーを変更できない場合は、アレクサンドルの提案を使用してSingletonのインスタンスをUserに作成することをお勧めします。これにより、任意のアクティビティからユーザを作成/更新することができます。

+0

彼は自分のクラスを変更できません.Percealableがどのように役立つでしょうか? –

+0

@AlexanderKulyakhtin彼は私が質問に答えた後、その要件を追加しました。私はそれを更新します。 – BlackHatSamurai

関連する問題