質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

3284閲覧

[Android] Serializableについて

morizoo-

総合スコア65

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/09/21 09:18

編集2016/09/23 09:06

カスタムデータクラスにSerializableをimplementsさせた時の挙動について疑問があります。

以下のカスタムデータはDBから取得した値を保持していて、ListViewの要素として表示させていました。そのセルをクリックした時に、その要素(IndividualData)を次のページに渡していたのですが、毎回ではなく度々アプリが落ちる様になりました。
仕方ないのでIndividualDataのHasMapを作成し、String型の属性だけ受け渡しさせたら落ちなくなりました。

lang

1//カスタムデータクラス 2//public class IndividualData implements Serializable { //ボツ 3public class IndividualData { 4 5 public String name; 6 public String searchString; 7 public String imageString; 8 public Bitmap image; 9 public String title; 10 public String affiliation; 11 public String research; 12 public Uri uri; 13 14 public IndividualData(String name, String searchString, String imageString, String title, String affiliation, String research) { 15 this.name = name; 16 this.searchString = searchString; 17 this.imageString = imageString; 18 this.title = title; 19 this.affiliation = affiliation; 20 this.research = research; 21 } 22 23 public IndividualData(String name, String searchString, String imageString, String title, String affiliation, String research, Uri uri) { 24 this(name, searchString, imageString, title, affiliation, research); 25 this.uri = uri; 26 } 27 28 public void setImage(Bitmap bitmap) { 29 this.image = bitmap; 30 } 31 32}

lang

1//送る側のActivity 2public class SendActivity extends Activity { 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.sendactivity_list); 7 8 ---------処理---------- 9 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 10 @Override 11 public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 12 IndividualData id = (IndividualData) adapterView.getItemAtPosition(i); 13 Intent intent = new Intent(getApplication(), ReceiveActivity.class); 14 //intent.putExtra("IndividualData", id); //ボツ 15 intent.putExtra("IndividualDataImageString", id.imageString); 16 startActivity(intent); 17 } 18 }); 19 } 20}

lang

1public class ReceiveActivity extends Activity { 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.receiveactivity); 6 7 //IndividualData id = (IndividualData) getIntent().getSerializableExtra("IndividualData"); //ボツ 8 String imageString = (String) getIntent().getStringExtra("IndividualDataImageString"); 9 IndividualData id = IndividualDataCache.getIndividualData(imageString); 10 //IndividualDataCacheがHashMapで各IndividualDataを保持していて、getIndividualData(String)で指定したIndividualDataを取得します。 11 12 Log.d(CLASS_TAG, String.valueOf(id.name)); //成功 13 } 14}

望みの実装は出来たのですが、なぜSerializableだと失敗したのかがわかりません。
よろしければご教授下さい。

###追記・修正
エラーログを追記致しました。
勝手ながら、前記では分かりやすい様クラス、変数名を改変しておりました。以下変更点です。
IndividualData -> ProfessorData
SendActivity -> ProfessorListActivity
ReceiveActivity -> ProfessorDetailActivity

FATAL EXCEPTION: main java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = u_aizu.mhamada_lab.u_aizu.Activity.TopActivity.MainActivity.AcademicActivity.ProfessorData) at android.os.Parcel.writeSerializable(Parcel.java:1468) at android.os.Parcel.writeValue(Parcel.java:1416) at android.os.Parcel.writeArrayMapInternal(Parcel.java:686) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330) at android.os.Bundle.writeToParcel(Bundle.java:1079) at android.os.Parcel.writeBundle(Parcel.java:711) at android.content.Intent.writeToParcel(Intent.java:7793) at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2639) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507) at android.app.Activity.startActivityForResult(Activity.java:3930) at android.app.Activity.startActivityForResult(Activity.java:3890) at android.app.Activity.startActivity(Activity.java:4213) at android.app.Activity.startActivity(Activity.java:4181) at u_aizu.mhamada_lab.u_aizu.Activity.TopActivity.MainActivity.AcademicActivity.ProfessorListActivity$1$1.onItemClick(ProfessorListActivity.java:200) at android.widget.AdapterView.performItemClick(AdapterView.java:310) at android.widget.AbsListView.performItemClick(AbsListView.java:1145) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066) at android.widget.AbsListView$3.run(AbsListView.java:3903) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.io.NotSerializableException: android.net.Uri$StringUri at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344) at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461) at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959) at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360) at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054) at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384) at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461) at android.os.Parcel.writeSerializable(Parcel.java:1463) at android.os.Parcel.writeValue(Parcel.java:1416)  at android.os.Parcel.writeArrayMapInternal(Parcel.java:686)  at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1330)  at android.os.Bundle.writeToParcel(Bundle.java:1079)  at android.os.Parcel.writeBundle(Parcel.java:711)  at android.content.Intent.writeToParcel(Intent.java:7793)  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2639)  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)  at android.app.Activity.startActivityForResult(Activity.java:3930)  at android.app.Activity.startActivityForResult(Activity.java:3890)  at android.app.Activity.startActivity(Activity.java:4213)  at android.app.Activity.startActivity(Activity.java:4181)  at u_aizu.mhamada_lab.u_aizu.Activity.TopActivity.MainActivity.AcademicActivity.ProfessorListActivity$1$1.onItemClick(ProfessorListActivity.java:200)  at android.widget.AdapterView.performItemClick(AdapterView.java:310)  at android.widget.AbsListView.performItemClick(AbsListView.java:1145)  at android.widget.AbsListView$PerformClick.run(AbsListView.java:3066)  at android.widget.AbsListView$3.run(AbsListView.java:3903)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/21 17:02

シリアライズするクラス内のフィールド(メンバー変数)は基本的な型(プリミティブ型)かシリアライズ可能なクラスでなければならない。フィールドのインスタンスがシリアライズ可能なクラスでない場合、NotSerializableExceptionが発生する。BitmapとUriがシリアライズ不可なのでは?これらはAndroidのクラスでしょうか?除外するにはtransientを記述する方法があります。
morizoo-

2016/09/23 09:12

修正依頼ありがとうございます。 vornan19さんのおっしゃる通り、カスタムクラスのUriとBitmapメンバをtransientで除外させると上記のエラーが解消されました。 お陰様で大分スッキリ致しました。ありがとうございます!
guest

回答1

0

ベストアンサー

Bundleに渡すデータ容量の問題だと思います。
Bundleにはデータ容量に上限があるのでBitmap等の大きいデータを入れることはできません。

エラーが発生して困っているならエラーログを質問に記載すべきです。

投稿2016/09/21 09:33

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morizoo-

2016/09/23 09:17

返答が遅れてしまい誠に申し訳ございません。 ご指摘ありがとうございます。修正としてエラーログを追記させて頂きました。長くなってしまいましたが勝手に取捨選択するのもどうかと思い全て表示させております。 yonaさんの仰る通り、エラーログを見てみるとBundle関係の記述が伺えるのでBitmapメンバが原因と思われます。 当方も意見を伺い納得致しました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問