問題タブ [parcelable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 受信アクティビティでパーセル可能なオブジェクトが null になるのはなぜですか?
さまざまなアクティビティに送信するより複雑なオブジェクトを持つことを意図して、Android 開発者ガイドの Parcelable の例に従っています。現在、私のクラスは String メンバーのラッパーです。オブジェクトをインテントに入れてインテントから読み返すと、期待どおりに読み取られますが、受信側では常にヌルポインターです。
私のクラス:
インテント/リードバック/startActivityの私のセットアップ:
私の受信アクティビティ:
私のログ:
私のスタックバックトレース:
android - 他の Parcelable を含む Parcelable を実装する際の問題
別の Parcelable insde を持つ Parcelable クラスを実装しています。
OuterParcelable クラス:
その後:
と:
上記のコードを使用してオブジェクトを再作成すると、次のようになります。
android - AndroidでParcelableなHashMapを作成することは可能ですか?
HashMapをParcelableとして拡張しようとしていますが、コンパイルする構文を取得しましたが、実行時に例外がスローされ、データのマーシャリングを解除しようとしてnullポインターが返されます。
送信者はあいまいさを解決するために(Parcelable)にキャストする必要がありますが、受信者はParcelableが期待されているが、HashMapが見つかったと文句を言います。
誰かがこれで成功しましたか?私の構文は間違っていますか?より良い解決策はありますか?
コードは次のとおりです。
- HomeActivity.java-送信者
- ContentViewActivity.java-レシーバー
- ContentItemSimple.java-その名前が示すように(文字列と整数をラップします)
- ContentItemCollection.java-これはHashMapです
HomeActivity.java
ContentViewActivity
ContentItemSimple.java
ContentItemContainer.java
android - シリアル化可能なオブジェクトは、バンドルに入れると常にシリアル化されますか?
シリアル化可能なオブジェクトまたはパーセル化可能なオブジェクトで使用Bundle
する場合、マーシャリングは実際にいつ発生するのでしょうか。バンドルに入れるとすぐに?バンドルは主に2つの画面間でデータを渡すために使用されるため(ここではIPCについても話していません!)、オブジェクトは常にメモリに保持されるため、オブジェクトをマーシャリングする意味はあまりないようです。 ?
マーシャリング(Javaシリアル化またはAndroidパーセリング)は、次の場合にのみ発生すると想定するのは正しいですか?
- データは、RMI中など、別のプロセスに渡す必要があります。
- コンポーネント(アクティビティまたはサービス)が破棄され、インスタンスの状態をディスクに書き込む必要がありますか?
Androidフレームワークエンジニア(Dianne Hackbornだったと思います)が、前者の方がはるかに高速であるため、Parcelable
代わりに使用する必要があると言っているのを見てきました。Serializable
どれくらい速いですか?そして、オブジェクトがとにかくほとんどの時間マーシャリングされていない場合(これに関する私たちの仮定が正しいと仮定して)、これは違いを生むでしょうか?
android - Android のライブラリ クラスにオブジェクトを送信する
Android でシンプルな自作ゲーム エンジン/フレームワークを作成しようとしています。私は、すべてのグラフィック レンダリング、ゲーム アクティビティなどを処理するライブラリ プロジェクトとして「エンジン」を持っています。基本的に、ライブラリ プロジェクトには、背景画像、ドローアブルの配列、およびいくつかの関数 (最も重要なのは run() 関数) を持つクラス GameMain があります。このライブラリを使用するプロジェクトは、このクラスを独自の run() 関数で拡張します。エンジンを使用するゲームは独自のアクティビティで開始し、ライブラリから GameActivity を起動し、固有の GameMain 子オブジェクトをライブラリに渡します。ライブラリは、ポリモーフィズムのおかげで固有の run() メソッドを実行する必要があります。
ただし、これを機能させるには苦労しました。私は当初、GameMain をシリアライズ可能にしようとしましたが、うまくいかないようでした。現在、Parcelable にしようとしていますが、ライブラリから呼び出されたときに子オブジェクトの run() 関数を実行しているようには見えません。Parcelable オブジェクトは実際にアクティビティ間で Object メソッドを送信できるのでしょうか? 私はこれを間違った方法で行っていますか、それとも私が発見していない他の奇妙なバグを抱えているだけですか?
android - AndroidでSerializableを使用するのは悪いですか?
私は、ParcelableoverSerializableの速度を称賛する多くの投稿や記事を読んでいます。私はしばらくの間、インテントを介してアクティビティ間でデータを渡すために両方を使用してきましたが、2つを切り替えるときに速度の違いに気付くことはまだありません。転送する必要のあるデータの一般的な量は、それぞれ2〜5個のフィールドを持つ5〜15個のネストされたオブジェクトです。
転送可能でなければならないクラスが約30あるので、Parcelableを実装するには、メンテナンス時間を追加する多くの定型コードが必要です。私の現在の要件の1つは、コンパイルされたコードをできるだけ小さくすることです。Serializable over Parcelableを使用することで、ある程度のスペースを節約できると思います。
Parcelableを使用する必要がありますか、それともそのような少量のデータに対してSerializableを使用する理由はありませんか?または、Serializableを使用すべきでない別の理由がありますか?
android - Address オブジェクトの配列を他のアクティビティに渡す方法
Addressオブジェクトの配列を Intent オブジェクトを介して別の Activityに渡そうとしています。
Address クラスはParcelableインターフェースを実装するので、次のことを試みます。Geocoder オブジェクトから List Address オブジェクトを取得し、これを Address オブジェクトの配列に変換しました。次に、この配列をインテントに入れ、アクティビティを呼び出します。
他のアクティビティでは、次のコードを使用してインテントから Address[] を取得しようとしています。しかし、最後の行の呼び出しは ClassCastException で終了しますLandroid.os.Parcelable
。
私は何を間違っていますか?Address[] を取得するにはどうすればよいですか。
android - バンドル内のカスタムオブジェクトのArrayListを送信する方法
サービスを使用して、x秒ごとにカスタムオブジェクト(MyObject)のArrayListを作成するアプリケーションがあります。次に、アクティビティでこのArrayListを取得します。
現在、サービスがデータのクエリを終了するたびに、アクティビティのハンドラーにメッセージを送信することを計画しています。ハンドラーへのメッセージにMyObjectsのArrayListを含める必要があります。
このArrayListをメッセージから取得するためにアクティビティでメソッドを構築すると、できないことに気づきました。
やってみたら
次に、私がそれを渡したメソッドは、ArrayListがそれを受け入れないことを期待していました。結果をキャストしようとした場合:
エラーが発生しました:Cannot cast from ArrayList<Parcelable> to ArrayList<MyObject>
MyObjectはParcelableを実装しており、アクティビティでサービスのメソッドを呼び出して取得することにより、サービスからアクティビティにArrayListを正常に送信しました。ただし、このデータについてサービスをポーリングすることをやめようとしています。
1)ハンドラーへのメッセージでバンドル内のArrayListを送信するにはどうすればよいですか?
2)アクティビティのデータを更新するために使用する必要がある別のモデルがありますか?表示される場合と表示されない場合がありますか?私は常に自分の活動のデータがサービスからの最新のものであることを望んでいます。
android - クラスを Parcelable にするエラー
サービスからアクティビティに渡すためにタスクを分割可能にしてバンドルに入れようとしていますが、カスタム タイプの ArrayList を操作するのに少し問題があります。
仕事:
リソース:
タスク内の prc.writeTypedArray 関数でエラーが発生します。
Resources が Parcelable を実装している場合、どこに問題があるのかわかりません。
編集:この部分を修正したと思います。代わりに .writeParcelableList() を使用しました。誰かがこれが機能することを確認できますか? 以下の質問はまだ有効です。
また、タスクがアクティビティによってインテントから読み取られる場合、他のデータ メンバーを埋めるために何らかの計算を行う必要があります。計算を行うために実装できる関数は何ですか? readFromParcel(...) または Parcelable をパラメーターとして受け取るコンストラクターですか?
ありがとう
android - コアに渡されるカスタムParcelableオブジェクト
Parcelableを実装するカスタムタイプの追加データ内で意図的にブロードキャストメッセージを送信したいと思います。
詳細:HSにショートカットを作成したいのですが、システムはカスタムコマンドタイプのオブジェクトを受け入れません。エラーメッセージ:android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.solvek.ussdfaster.entities.Command
ユーザーがショートカットをクリックすると、このオブジェクトがアプリに返されます。