Retrofit Android中的会话Cookie不持久化

6

你好,我目前正在开发一款使用Retrofit进行网络调用的Android应用程序。这是我的需求基本概述。

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

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

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

AppController.java(Application类的子类)

    public class AppController extends Application {
        private static AppController mInstance;
        private static OkHttpClient client;
        private static CookieManager cookieManager;
        private static Context context;
        private static AviyalApiService api; //自定义接口包含所有GET和POST
        private static OkClient okClient;
        private static RestAdapter adapter;
@Override public void onCreate() { super.onCreate();
client = new 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);
adapter = new RestAdapter.Builder() .setEndpoint(context.getResources().getString(R.string.base_url)) .setClient(okClient).build(); }
.....

这里是我调用服务的代码片段。

    class LoginActivity extends Activity{
       ....
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ....
        ApiService api = AppController.getApi();
        api.fbLogin(tok, new Callback() {
            @Override
            public void success(FbLogin fbLogin, Response response) {
            //success
            }
             @Override
            public void failure(RetrofitError error) {
                MyFunctions.showAlertDialogue(LoginActivity.this, "Login Failed", error.getMessage(), "OK", null);
            });
        ......

谢谢。

1个回答

2
问题解决了...感谢这个链接:https://gist.github.com/jacobtabak/78e226673d5a6a4c4367 上述程序需要进行一些小的更改才能正常工作。在上述程序中,它会抛出一个错误,说它不能将entry转换为字符串。您可以通过添加enrty.toString()来解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接