[解決済み] Virgil Dobjanschi REST実装パターンを実装したAndroid REST Clientのサンプルプロジェクトが必要です。
質問
アンドロイド携帯でRESTクライアントを作りたいのですが、どうすればいいですか?
RESTサーバはいくつかのリソースを公開しており、例えば(GET)
http://foo.bar/customer List of all customer
http://foo.bar/customer/4711 The customer with id 4711
http://foo.bar/customer/vip List of all VIP customer
http://foo.bar/company List of all companys
http://foo.bar/company/4711 The company with the ID 4711
http://foo.bar/company/vip List of all VIP companys
RESTサーバと会話して必要な情報を取得する方法は分かっている(と思う)。私は次のようなAPIを持つRESTクライアントクラスを実装します。
public List<Customer> getCustomers();
public Customer getCustomer(final String id);
public List<Customer> getVipCustomer();
public List<Company> getCompanies();
public Customer getCompany(final String id);
public List<Customer> getVipCompanies();
プレゼンテーション"を参照しました。 Android RESTクライアントアプリケーションを開発する Virgil Dobjanschiから、RESTリクエストをActivityのWorker Threadで処理するのは良いアイデアではないことを学びました。代わりに サービス APIを使うべきです。
私は(ローカル)サービスにバインドするSingleton ServiceHelperを持つというアイデアが好きですが、私はサービスの概念を正しく理解していなかったと恐れています。
今のところ、REST呼び出しの結果(サービス内で非同期的に行われる)を呼び出し元のアクティビティに報告する方法を理解していません。また、すべてのRESTリクエスト(異なる戻り値のタイプ)を処理する1つのサービスが必要なのか、または各RESTリクエストに専用のサービスが必要なのか、疑問に思っています。
おそらく、私は他にも多くの理解できない問題を抱えているので、私にとって最も良いのは サンプルアプリケーション がベストだと思います。私のユースケースは珍しいものではないので、サンプルアプリケーションがあることを望みます。
あなたは私に知らせてください
正しい実装の方向に私を指し示す他の任意の提案はまた有用である(Android API-デモは私のユースケースに一致しません)。
事前にありがとうございます。
クラウス
EDIT : 同様のトピックがSOで見つかり(これを投稿した後)、私が必要とする方向(複雑な "Dobjanschi pattern" を最小化する)に導いてくれました。
どのように解決するのですか?
オーバービュー
編集する。
誰か興味のある人は、次のサイトも見てみてください。 RESTfulアンドロイド を見てみてください。
Dobjanschiモデルを実装しようとした経験から学んだことは、すべてが石に書かれているわけではなく、アプリごとに変わるかもしれませんが、公式はどうなっているのかの概要を示しているだけだということです。
このアイデアに従う + 自分のアイデアを加える = 幸せなAndroidアプリケーション
アプリによっては、SyncAdapterにアカウントを必要としないものや、C2DMを使用するものなど、要件とは異なるモデルがあるかもしれません。
アカウントと AccountManager を持つアプリケーションを作成する。
SyncAdapterを使用してデータを同期させることができます。これについては 独自の SyncAdapter を作成する
を作成します。 ContentProvider を作成します (ニーズに合っている場合)。
この抽象化により、データベースにアクセスできるだけでなく、REST Archと1対1のMappingメソッドを持っているので、ServiceHelperに行き、RESTコールを実行することができます。
コンテンツプロバイダ|RESTメソッド
クエリ ----------------> GET
挿入 ----------------> PUT
更新 ----------------> POST
削除 ----------------> DELETE
ServiceHelperのレイヤー化
これは基本的に、ContentProviderから渡されたパラメータでHttp(必ずしもプロトコルではないが、最も一般的なもの)のRESTメソッドを実行するサービス(複数可)を開始します。コンテンツプロバイダのUriMatcherから取得したマッチング整数を渡したので、どのRESTリソースにアクセスすればよいかがわかる。
class ServiceHelper{
public static void execute(Context context,int match,String parameters){
//find the service resource (/path/to/remote/service with the match
//start service with parameters
}
}
サービス内容
ヘルパーから渡されたパラメータでRESTMethodに移動します。
また、BroadCastReceiverを実装して、サービスが作業を終えたら、このBroadcastを登録したActivityに通知して、再度問い合わせをするようにします。この最後のステップはVirgill Conferenceには載っていないと思いますが、良い方法だと思います。
RESTMethodクラス
パラメータを受け取り、WSリソース( http://myservice.com/service/path ) がパラメータを追加し、すべてを準備し、呼び出しを実行し、応答を保存します。
authtokenが必要な場合は、AccountManagerから要求することができます。 認証に失敗した場合は、一度認証トークンを無効にしてから再認証することで、新しいトークンを取得できます。
最後にRESTMethodはXMLかJSONのどちらかを返しますが、マッチャーに基づいたプロセッサを作成し、レスポンスを渡します。
プロセッサ
レスポンスを解析し、ローカルに挿入する役割を担っています。
サンプルアプリケーション?もちろんです。
また、テストアプリケーションに興味がある方は エリG これは最高の例ではないかもしれませんが、Service RESTのアプローチに従っており、ServiceHelper, Processor, ContentProvider, Loader, and Broadcastで構築されています。
関連
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
型に解決できない エラー解決
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
FindBugの使用概要
-
htmlとwordの相互変換の実装(画像あり)
-
ApiModel と @ApiModelProperty の使用法
-
[解決済み] Android REST クライアント、サンプル?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
無効なメソッド宣言
-
アノテーション「@Retention」の役割
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
eclipse にリソースリーク:'in' が閉じない
-
Zipファイルの圧縮・解凍にantを使用する
-
[解決済み】Restful APIサービス