2013-04-17 8 views
0

У меня есть другое приложение, встроенное в iOS, и когда пользователь входит в приложение, сервер регистрирует их на этом сеансе. В приложении iOS сеанс поддерживается до тех пор, пока обычные сеансы и все запросы из приложения видят, что человек все еще зарегистрирован.Android: сохранение сеанса на удаленном сервере между действиями

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

Есть ли разница здесь, что я не понимаю, что не поддерживает мою сессию на сервере вживую?

У меня есть базовый класс, который охватывает все мои действия, и внутри базового класса у меня есть этот защищенный класс. Я использую его для отправки всех запросов.

protected class API extends AsyncTask <Void, Void, String> 
{ 
    public String RequestName; 
    public String RequestType; 
    public String RequestUrl; 
    public List<NameValuePair> RequestParameters; 

    public API(String Name, String Type, String Url, List<NameValuePair> params) 
    { 
     RequestName = Name; 
     RequestType = Type; 
     RequestUrl = Url; 
     RequestParameters = params; 
    } 

    protected String getASCIIContentFromEntity(HttpEntity entity) throws IllegalStateException, IOException 
    { 
     InputStream in = entity.getContent(); 
     StringBuffer out = new StringBuffer(); 
     int n = 1; 
     while (n>0) 
     { 
      byte[] b = new byte[4096]; 
      n = in.read(b); 
      if (n>0) 
       out.append(new String(b, 0, n)); 
     } 
     return out.toString(); 
    } 

    @Override 
    protected String doInBackground(Void... params) 
    { 


     HttpClient httpClient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 

     String text = null; 

     if(RequestType == "post") 
     { 
      HttpPost p = new HttpPost("http://www.ehrx.com/api/" + RequestUrl); 

      try 
      { 
       p.setEntity(new UrlEncodedFormEntity(RequestParameters)); 
       HttpResponse response = httpClient.execute(p, localContext); 
       HttpEntity entity = response.getEntity(); 
       text = getASCIIContentFromEntity(entity); 
      } 
      catch (Exception e) 
      { 
       return e.getLocalizedMessage(); 
      } 
     } 
     else 
     { 
      HttpGet httpGet = new HttpGet("http://www.ehrx.com/api/" + RequestUrl); 

      try 
      { 
       HttpResponse response = httpClient.execute(httpGet, localContext); 
       HttpEntity entity = response.getEntity(); 
       text = getASCIIContentFromEntity(entity); 
      } 
      catch (Exception e) 
      { 
       return e.getLocalizedMessage(); 
      } 
     } 



     return text; 
    } 

    protected void onPostExecute(String results) 
    { 
     HandleResult(results, RequestName); 

    } 
} 

ответ

4

Я бы предположил, что сеанс все еще жив на сервере, но вы теряете свой cookie сеанса в приложении Android. Похоже, вы создаете новый клиент и новый контекст для каждого запроса. Вы захотите установить хранилище cookie для контекста, чтобы он мог использовать cookie сеанса из ваших предыдущих запросов, где вы прошли аутентификацию. Ответ на How do I manage cookies with HttpClient in Android and/or Java? должен дать вам больше информации.

+0

Я обновил свой вопрос более подробно. – Jhorra

+0

Я обновил свой ответ более подробно. – digitaljoel

+0

Отлично, спасибо. – Jhorra

0

Это может быть легко исправлено с использованием одноэлементного класса (вы должны использовать один и тот же HTTP-клиент на всех ваших HTTP-запросах).

Смежные вопросы