3

サービスを使用して、x秒ごとにカスタムオブジェクト(MyObject)のArrayListを作成するアプリケーションがあります。次に、アクティビティでこのArrayListを取得します。

現在、サービスがデータのクエリを終了するたびに、アクティビティのハンドラーにメッセージを送信することを計画しています。ハンドラーへのメッセージにMyObjectsのArrayListを含める必要があります。

このArrayListをメッセージから取得するためにアクティビティでメソッドを構築すると、できないことに気づきました。

やってみたら

msg.getData().getParcelableArrayList("myObjects")

次に、私がそれを渡したメソッドは、ArrayListがそれを受け入れないことを期待していました。結果をキャストしようとした場合:

(ArrayList<MyObject>)msg.getData().getParcelableArrayList("myObjects")

エラーが発生しました:Cannot cast from ArrayList<Parcelable> to ArrayList<MyObject>

MyObjectはParcelableを実装しており、アクティビティでサービスのメソッドを呼び出して取得することにより、サービスからアクティビティにArrayListを正常に送信しました。ただし、このデータについてサービスをポーリングすることをやめようとしています。

1)ハンドラーへのメッセージでバンドル内のArrayListを送信するにはどうすればよいですか?

2)アクティビティのデータを更新するために使用する必要がある別のモデルがありますか?表示される場合と表示されない場合がありますか?私は常に自分の活動のデータがサービスからの最新のものであることを望んでいます。

4

3 に答える 3

1

私はまったく同じ質問をしましたが、それでも面倒Parcelableですが、静的変数はそのタスクにとってそれほど悪い考えではないことがわかりました。

静的フィールドを作成するだけです

public static ArrayList<MyObject> myObjects = .. 

経由して他の場所からそれを使用しますMyRefActivity.myObjects

アクティビティを含むアプリケーションのコンテキストで、パブリック静的変数が何を意味するのかわかりませんでした。これまたはこのアプローチのパフォーマンスの側面についても疑問がある場合は、以下を参照してください。

乾杯。

于 2015-02-02T15:03:03.477 に答える
0

使用する必要がある別のモデルがあります。私が尋ねた別の質問は答えを提供しました:

アクティビティが実行されている場合、サービスからの通知を抑制します

#1に関しては、ArrayList宣言からジェネリックを削除し、必要に応じてキャストするだけで回避できます。他の質問に基づいてリファクタリングする前にこれを行ったので、これが機能することはわかっています。

于 2010-09-17T20:44:08.643 に答える
0

キャストが問題である場合は、そのままにして、キャストしないでください。エラーはなくなります。

于 2013-09-08T00:42:40.447 に答える