2012-02-03 12 views
1

今日はIntentについて学習していて、サービスをアクティビティにバインドしていました。サービスからアクティビティへデータを転送するのは簡単で素晴らしい方法でした。サービスを開始するアクティビティをテストしたかったので、このサービスはウェブページを呼び出してデータを取得します。私は、アクティビティがサービスメソッドを呼び出すことができるように、アクティビティをサービスにバインドして、結果をトーストしました。サービスメソッドでは、Webページを呼び出してデータを返します。私はそれをテストしたときにnullポインタ例外が発生していました。私は正しい方法でやっていないと確信しています。これを正しく実装する方法はありません。サービスを開始してデータを返す

+0

コードの一部を見ることなく、伝えることは不可能です。 –

+0

私はコード –

+0

を追加しました。知っておくと便利なことは、そこではクラッシュが発生する場所で、私たちは干草で針を演奏させるのです。 –

答えて

1

ここではかなりのスレッド同期の問題を扱っています。何らかのリスナー・パラダイムを登録すれば、サービスが作成しているデータのリスナーとしてアクティビティーを登録することができます。現在のところ、サービスとアクティビティはまったく同期していないため、アクティビティは準備が整う前にサービスから結果を取得しようとします。リスナー・パターンまたはオブザーバー・パターンについて議論しているリソースは数多くあります。

サービスが実際に正しく機能しているかどうかはわかりません。私はちょうど2つの間のあなたのコミュニケーションを見ている。

+0

スレッドに関する問題ここでは、私は意図を巡っていたが、最初にハンドラを調べるつもりだったが、スレッドの問題を回避する必要があるようだ。 –

0

サービスから結果を返すときは、あなたのアクティビティにResultReceiverインターフェイスを実装し、putExtra経由で受信者オブジェクトをサービスに渡す方が良いです。あなたのサービスで受信者オブジェクトを取得し、receiver.send()を呼び出して、バンドルで何かを送信する機能を呼び出します。 [私はこのパターンをIntentService少なくともテストしました。]

編集:完全な実装のためにthisの投稿をチェックしてください。

関連する問題