6

嗨,我目前正在开发一个使用 Retrofit 进行网络调用的 Android 应用程序。这是对我的要求的基本概述。

     1.获取Facebook访问令牌并将其发送到服务器。
     2.服务器在响应中设置一个会话cookie。
     3.在所有即将到来的请求中,将会话 cookie 发回。

当前问题:
除非用户正在使用应用程序(跨不同活动),否则我能够保持会话 cookie 处于活动状态。但是一旦用户退出应用程序,Cookie 就会被删除。我已经在一个扩展应用程序类的类中声明了这些 cookie 。即使在应用程序退出后,我也需要保持这些会话 cookie 处于活动状态。这样当用户再次打开我的应用程序时,我就可以使用它们进行进一步处理。

以下是我在我的应用程序中实现的一些代码片段。

AppController.java(Application 类的子类)

    公共类 AppController 扩展应用程序 {
        私有静态 AppController mInstance;
        私有静态 OkHttpClient 客户端;
        私有静态 CookieManager cookieManager;
        私有静态上下文上下文;
        私有静态 AviyalApiService api;// 具有所有 GET 和 POST 的自定义接口
        私有静态 OkClient okClient;
        私有静态 RestAdapter 适配器;

        @覆盖
        公共无效 onCreate() {
            超级.onCreate();

            客户端 = 新的 OkHttpClient();

            cookieManager = AppController.getCookieManager();
            client.setCookieHandler(cookieManager);
            client.setFollowRedirects(true);
            client.setFollowRedirects(true);
            okClient = new OkClient(client);

            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();
        }

       ......

这是我如何调用服务的片段。

    类 LoginActivity 扩展 Activity{
       ……
    @覆盖
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ……
        ApiService api = AppController.getApi();
        api.fbLogin(tok, new Callback() {
            @覆盖
            公共无效成功(FbLogin fbLogin,响应响应){
            //成功
            }
             @覆盖
            公共无效失败(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 回答