6

こんにちは、私は現在、レトロフィットを使用してネットワーク呼び出しを行う Android アプリケーションを開発しています。ここでは、私の要件の概要について説明します。

     1.Facebookのアクセストークンを取得し、サーバーに送信します。
     2.サーバーは、応答にセッション Cookie を設定します。
     3.今後のすべてのリクエストで、セッション Cookie が返送されます。

現在の問題:
ユーザーがアプリを (さまざまなアクティビティで) 使用していない限り、セッション Cookie を有効に保つことができます。ただし、ユーザーがアプリを終了すると、Cookie は削除されます。これらの Cookie は、Applicationクラスを超えるクラス内で宣言しました。アプリが終了した後でも、これらのセッション Cookie を維持する必要があります。ユーザーが再びアプリケーションを開いたときに、それらをさらに処理するために使用できるようにします。

ここに、アプリケーションに実装したコード スニペットをいくつか示します。

AppController.java (Application クラスのサブクラス)

    public class AppController extends Application {
        プライベート静的 AppController mInstance;
        プライベートな静的 OkHttpClient クライアント。
        プライベート静的 CookieManager cookieManager;
        プライベートな静的コンテキスト コンテキスト。
        プライベート スタティック AviyalApiService api; // すべての GET と POST を持つカスタム インターフェイス
        プライベート静的 OkClient okClient;
        プライベート静的 RestAdapter アダプター。

        @オーバーライド
        public void onCreate() {
            super.onCreate();

            クライアント = 新しい OkHttpClient();

            cookieManager = AppController.getCookieManager();
            client.setCookieHandler(cookieManager);
            client.setFollowRedirects(真);
            client.setFollowRedirects(真);
            okClient = 新しい OkClient(クライアント);

            CookieManager cookieManager = new CookieManager();
            cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
            CookieHandler.setDefault(cookieManager);

            アダプタ = 新しい RestAdapter.Builder()
                    .setEndpoint(context.getResources().getString(R.string.base_url))
                    .setClient(okClient).build();
        }

       .....

これは、サービスを呼び出す方法のスニペットです。

    class LoginActivity は Activity を拡張します{
       ....
    @オーバーライド
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ....
        ApiService api = AppController.getApi();
        api.fbLogin(tok, new Callback() {
            @オーバーライド
            public void success(FbLogin fbLogin, Response レスポンス) {
            //成功
            }
             @オーバーライド
            public void failure(RetrofitError エラー) {
                MyFunctions.showAlertDialogue(LoginActivity.this, "ログインに失敗しました", error.getMessage(), "OK", null);
            });
        ……

前もって感謝します。

4

1 に答える 1

2

問題は解決しました....このリンクのおかげで https://gist.github.com/jacobtabak/78e226673d5a6a4c4367

上記のプログラムを機能させるには、小さな変更が必要です。上記のプログラムでは、エントリを文字列にキャストできないというエラーがスローされます。を加えることで解けenrty.toString()ます。

于 2014-12-24T09:54:28.303 に答える