Метод setRequestProperty, предоставляющий java.lang.IllegalStateException: не может установить метод после того, как соединение установлено - PullRequest
4 голосов
/ 11 октября 2011
HttpURLConnection con = null;
        Response response = new Response();
        String TAG = "HttpConHandler";

        try{
            /*
             * IMPORTANT: 
             * User SHOULD provide URL Encoded Parms
             */
            Log.p(TAG, "URL="+ urlStr);
            String q=httpHeaders.get("Authorization");

            URL url = new URL(urlStr);
            con = (HttpURLConnection) url.openConnection(); 

            con.setRequestProperty("Authorization", q);
            con.setRequestProperty("GData-Version", "3.0");

Привет, я получаю java.lang.IllegalStateException: Cannot set method after connection is made ошибку, когда вызывается метод setRequestProperty, но когда я вызываю этот метод перед подключением, я получаю NullPointerException, потому что con равно нулю.Что я могу сделать, чтобы решить эту проблему?

Ответы [ 3 ]

1 голос
/ 22 апреля 2013

Пожалуйста, проверьте этот URL от Google: http://developer.android.com/reference/java/net/HttpURLConnection.html

Можно использовать метод openConnection() перед настройкой заголовков. Вот шаги из документации:

  1. Получите новый HttpURLConnection, вызвав URL.openConnection () и приведя результат к HttpURLConnection.
  2. Подготовьте запрос. Основным свойством запроса является его URI. Заголовки запросов также могут включать метаданные, такие как учетные данные, предпочтительные типы контента и сеансовые куки.
  3. При желании загрузить тело запроса. Экземпляры должны быть сконфигурированы с setDoOutput(true), если они включают тело запроса. Передайте данные путем записи в поток, возвращаемый getOutputStream().
  4. Прочитайте ответ. Заголовки ответа обычно включают метаданные, такие как тип и длина содержимого тела ответа, измененные даты и файлы cookie сеанса. Тело ответа может быть прочитано из потока, возвращенного getInputStream(). Если в ответе нет тела, этот метод возвращает пустой поток.
  5. Disconnect. После прочтения тела ответа HttpURLConnection следует закрыть, вызвав disconnect(). Отключение освобождает ресурсы, удерживаемые соединением, поэтому они могут быть закрыты или использованы повторно.

Однако, если проблема не устранена, вы можете попробовать отладить свой код и проверить закрытый флаг connection.connected, чтобы увидеть, где он становится истинным; У меня возникла похожая проблема после вызова метода getContentType().

В противном случае вы можете просто переключиться на HttpClient API:

  HttpClient httpclient = new DefaultHttpClient();

    // Prepare a request object
    HttpGet httpget = new HttpGet(url); 

    // Execute the request
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
....
0 голосов
/ 11 октября 2011

Это может работать:

URL url = new URL(urlStr);
con = (HttpURLConnection) url.openConnection(); 
con.setDoOutput(true);
con.setRequestProperty("Authorization", q);
con.setRequestProperty("GData-Version", "3.0");
0 голосов
/ 11 октября 2011

Не используйте удобный метод URL, используйте HttpURLConnection или другую библиотеку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...