Android: Как хранить файлы cookie?

В моем приложении для Android каждое действие заполняется данными из XML-файла, который находится где-то в Интернете. На веб-сайте, предоставляющем эти файлы, есть механизм входа, который работает с файлами cookie.

Я знаю, как сделать HTTP-запрос на страницу входа и получить файл cookie. Я не знаю, как я могу сохранить его для повторного использования в обеих других действиях И когда приложение будет запущено в следующий раз. Файл cookie действителен в течение года, поэтому пользователь моего приложения должен войти в систему один раз, а затем никогда больше в течение целого года.

Как мне это сделать? Я много гугл, но либо использовал неправильные ключевые слова, либо нет простых решений в Интернете. Надеюсь, кто-то здесь может мне помочь.

С наилучшими пожеланиями и благодарностью, Ян Оливер

Solutions Collecting From Web of "Android: Как хранить файлы cookie?"

Похоже, что Android использует реализацию по умолчанию в памяти, поэтому вам нужно создать свой собственный постоянный хранилище cookie.

В этом учебном пособии Java вы можете создать собственный постоянный магазин, воспользовавшись реализацией по умолчанию. http://download.oracle.com/javase/tutorial/networking/cookies/custom.html

Образец имеет два todo для хранения (чтение / запись). Для хранения я бы просто использовал SharedPreferences для хранения только необходимого cookie сеанса и не сохранял никаких других.

В примере используется крюк выключения, который вы не хотите в Android. Вместо run () и hook я бы просто получил новый public method persist (), который сохраняет то, что вы хотите, хотя это требует, чтобы вы сохраняли () хранилище вручную.

Учитывая, что у вас есть только одно или два куки-файла, которые имеют значение, вы можете сохранить их в добавлении (…)

Используйте CookieSyncManager для сохранения вашего значения cookie. Он может сохраняться при запуске приложений.

Остерегайтесь использования CookieSyncManager внутри WebViewClient # shouldInterceptRequest на KitKat. Он закроется .

РЕДАКТИРОВАТЬ

CookieSyncManager устарел в API 21:

Этот класс устарел в API уровня 21. WebView теперь автоматически синхронизирует файлы cookie по мере необходимости. Вам больше не нужно создавать или использовать CookieSyncManager. Для принудительной синхронизации вручную вы можете использовать метод CookieManager flush (), который является синхронной заменой для sync () .

LoopJ имеет встроенный постоянный хранилище cookie, который может использоваться с или без рамки loopj

https://github.com/loopj/android-async-http/blob/master/library/src/main/java/com/loopj/android/http/PersistentCookieStore.java

После того, как вы сделаете свой http-вызов, вы можете захватить файлы cookie, подобные этому

 List<Cookie> cookies = httpclient.getCookieStore().getCookies(); if (cookies.isEmpty()) { Log.d(TAG,"no cookies received"); } else { for (int i = 0; i < cookies.size(); i++) { if(cookies.get(i).getName().contentEquals("PHPSESSID")) { PHPSESSID = cookies.get(i).getValue(); } } } 

Чтобы отправить их обратно:

 nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid)); httppost.setEntity(new UrlEncodedFormEntity(aList)); 

AList – все ваше имяValuePairs

Я написал простой класс с именем CookieHelper, и я привел пример того, как использовать этот класс, чтобы помочь всем пользователям, столкнувшимся с одной и той же проблемой: https://github.com/augustopicciani/HttpClient-save-cookies-to-file