2015-02-25 5 views
0

Сегодня я делаю первую попытку отправки запроса POST с помощью JSON для сохранения некоторых данных, и я не могу этого сделать. Мое приложение работает, выполнив вход, а затем сохраните, измените и удалите данные. Это уже сделано в iOS, но поскольку я новичок в Android, я не уверен, как это сделать. Вот моя POST функция:Не удалось POST для REST API

public String POST(String targetURL, String urlParameters, String user, String pwd) { 
     URL url; 
     String u = targetURL; 

     HttpURLConnection connection = null; 
     try { 
      // Create connection 
      // u=URLEncoder.encode(u, "UTF-8"); 
      url = new URL(u); 
      connection = (HttpURLConnection) url.openConnection(); 
      // cambiarlo luego al usuario q esta logeado 
      String login = user + ":" + pwd; 
      String encoding = new String(org.apache.commons.codec.binary.Base64.encodeBase64(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(login))); 

      connection.setRequestMethod("POST"); 

      connection.setRequestProperty("Authorization", "Basic " + encoding); 
      connection.setRequestProperty("Content-Type", "plain/text");// hace q sirva con el string de json 

      connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); 
      connection.setRequestProperty("Content-Language", "en-US"); 

      connection.setUseCaches(false); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      connection.setReadTimeout(120000); 
      // Send request 
      DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
      wr.writeBytes(urlParameters); 
      wr.flush(); 
      wr.close(); 

      // Get Response 
      InputStream is = connection.getInputStream(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
      String line; 
      StringBuffer response = new StringBuffer(); 
      this.setResponseCode(connection.getResponseCode()); 
      while ((line = rd.readLine()) != null) { 
       response.append(line); 
       response.append('\r'); 
      } 
      rd.close(); 
      return response.toString(); 

     } catch (Exception e) { 

      e.printStackTrace(); 
      return null; 

     } finally { 

      if (connection != null) { 
       connection.disconnect(); 
      } 
     } 
    } 

Описанный выше метод выполняется с AsyncTask, и даже если я использую его для входа с использованием Spring безопасности, она работает, и даже я могу сохранить для внутреннего использования имя пользователя, пароль и секретный токен. Я не знаю, если мне нужно поставить токен в заголовок или что-то в этом роде, потому что я уже сделал это, без положительных результатов. Я предполагаю, что единственное разрешение, которое мне нужно выполнить, - это интернет, поэтому в моем файле манифеста я указал это разрешение. Я с ума схожу с этой проблемой, пожалуйста, помогите! Спасибо заранее.

EDIT:

Извините, ребята, я своего рода новым для этого способа просить, а также, не НОСИТЕЛЕМ английский: P Выход я получаю после отправки запроса, является HTML из страница, которая обрабатывает входа в систему в веб-приложение ... Мне нужно как ответ JSON или что-то подобное, чтобы убедиться, что запрос был сохранен правильно

+0

Не могли бы вы объяснить более подробно проблему? Какая ошибка вы получаете? прочитайте: http://stackoverflow.com/help/how-to-ask –

+0

String urlParameters. Мы не знаем контент, который вы собираетесь написать в выходной поток. Он должен быть специально отформатирован. Покажите, пожалуйста. – greenapps

+0

Вы можете попробовать включить ведение журнала на сервере и посмотреть, где остановится обработка. т. е. это плохой запрос или что-то еще? – Droidekas

ответ

0

Попробуйте обработку куки

CookieManager cookieManager = new CookieManager(); 
CookieHandler.setDefault(cookieManager); 

Это должен быть синглтон.

+0

В основном обрабатывайте файлы cookie 'J_SESSIONID', чтобы иметь действующее соединение. – Droidekas