Android: How to store cookies?

Просто для краткого, рабочего примера, чтобы увидеть эффект их различия

new Thread(foo).Start();

private void foo()
{
  this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
    (ThreadStart)delegate()
    {
        myTextBox.Text = "bing";
        Thread.Sleep(TimeSpan.FromSeconds(3));
    });
  MessageBox.Show("done");
}

Если использовать BeginInvoke , MessageBox выскакивает одновременно с обновлением текста. Если использовать Invoke , MessageBox выскакивает после 3-секундного сна. Отсюда показано влияние асинхронного ( BeginInvoke ) и синхронного ( Invoke ) вызова.

26
задан janoliver 2 November 2010 в 22:49
поделиться

2 ответа

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

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

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

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

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

10
ответ дан 28 November 2019 в 07:35
поделиться

После того, как вы сделаете ваш 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

4
ответ дан 28 November 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: