2014-12-24 3 views
5

Привет В настоящее время я разрабатываю приложение для Android, которое использует Retrofit для создания сетевых вызовов. Вот базовый обзор моего требования.
Сессия Cookie не устойчива в дооснащении Android

  1.Get Facebook access token and send it to the server. 
    2.The server sets a Session cookie in the response. 
    3.In all the upcoming requests send the session cookies back. 

Текущая проблема:
Я могу держать куки сессии в живых, если пользователь не использует приложение (через различные виды деятельности). Но как только пользователь выйдет из приложения, файлы cookie будут удалены. Я объявил эти куки внутри класса, который exjends Приложение класс. Мне нужно, чтобы эти сеансовые куки были сохранены даже после выхода приложения. так что я могу использовать их для дальнейшей обработки, когда пользователь снова открывает мое приложение.

Вот некоторые фрагменты кода, которые я реализовал в своем приложении.

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; // custom interface having all the GET and 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); 
      }); 
     ...... 

Заранее спасибо.

ответ

2

проблема решена .... Благодаря этой ссылке https://gist.github.com/jacobtabak/78e226673d5a6a4c4367

А небольшие изменения будут необходимы в вышеуказанной программе, чтобы заставить его работать. В вышеприведенной программе вы получите ошибку, говорящую о том, что она не может вводить запись в строку. Вы можете решить, добавив enrty.toString().

+0

Благодарим за это. –