これが私の投稿です:
私は自分自身をできるだけ明確にしようとしています:
- 私のアプリケーションのクラスの説明
- コードアーキテクチャの説明(サービス別およびアクティビティ別)
- 何が起こるべきかの説明
- 実際に起こることの説明
- Logcat
- ソースコード
アプリケーションクラスの説明
私のアプリケーションには次のようなものがあります。
MAJService
クラスによって管理される、起動時に起動するサービスConsoNRJ
クラスによって管理されるアクティビティ- HTTP経由でHTMLページを取得するワーカークラス。
MAJDonnees
InfosConso
呼び出され、ワーカーをインスタンス化するヘルパークラスMAJDonnees
。
処理の説明
サービスが開始されると、次のようになります。
InfosConso
オブジェクトを作成する- この
InfosConso
オブジェクトはMAJDonnees
- この
MAJDonnees
オブジェクトは、を使用してHTTPクエリを実行しますHttpURLConnection
アクティビティはほぼ同じです。
InfosConso
オブジェクトを作成する- この
InfosConso
オブジェクトはMAJDonnees
- この
MAJDonnees
オブジェクトはを作成しAsyncTask
、を使用してHTTPクエリを実行しますHttpURLConnection
あなたは私のコードを理解するのに役立つかもしれないグラフを見ることができます:
code.google.com/p/consonrj/wiki/CodeStructure
何が起こるべきか
アクティビティとサービスは基本的に(クラス内で)同じコードを実行するためMAJDonnees
、HTMLページをフェッチして解析するというまったく同じように動作する必要があります。
実際に何が起こるか
サービスから実行すると、でのHttpURLConnections
処理中に悪い結果が返されMAJDonnees
ます。呼び出されたHttpURLConnections
インスタンスh
は無効なHTTP応答を返します:h.getResponseCode()
-1を返します。
より多くのデバッグ情報を取得する方法がわかりません。
ただし、アクティビティが開始されると、HTTP接続は処理中MAJDonnees
に機能し、実際h.getResponseCode()
に200(HTTP 200 OK)を返します。
次に、サービスが再度実行されると(x分ごとに実行されるようにスケジュールされています)、HTTP接続が機能します。
Logcat
サービスのログキャットを最初に実行し、次にアクティビティを実行し、次にサービスを再度実行して、動作を確認できます。
http://pastebin.com/DGc8fym2
申し訳ありませんが、フランス語です。まだ推測できるといいのですが。:)
ソースコード
必要に応じて、次のソース全体を確認できます:
code.google.com/p/consonrj/source/browse/#svn/trunk
私がこれをデバッグするのを手伝ってくれることを願っています!私のサービスは、デバイスの起動時およびx時間/日ごとにインターネットからデータをフェッチする必要があり、最初にアクティビティを開始する必要はありません。
ありがとう。