Я пытаюсь получить данные ответа запроса Http. Мой код выглядит следующим образом:Android HttpURLConnection wierd response
public class Networking {
// private variables
private URL mUrl;
private InputStream mInputStream;
public void Networking() {}
public InputStream setupConnection(String urlString) {
// public variables
int connectionTimeout = 10000; // milliseconds
int readTimeout = 15000; // milliseconds
try {
mUrl = new URL(urlString);
try {
// initialize connection
HttpURLConnection connection = (HttpURLConnection) mUrl.openConnection();
// setup connection
connection.setConnectTimeout(connectionTimeout);
connection.setReadTimeout(readTimeout);
connection.setRequestMethod("GET");
connection.setDoInput(true);
// start the query
try {
connection.connect();
int response = connection.getResponseCode();
if (response == 200) {
// OK
mInputStream = connection.getInputStream();
return mInputStream;
} else if (response == 401) {
// Unauthorized
Log.e("Networking.setupConn...", "unauthorized HttpURL connection");
} else {
// no response code
Log.e("Networking.setupConn...", "could not discern response code");
}
} catch (java.io.IOException e) {
Log.e("Networking.setupConn...", "error connecting");
}
} catch (java.io.IOException e) {
Log.e("Networking.setupConn...", "unable to open HTTP Connection");
}
} catch (java.net.MalformedURLException e) {
Log.e("Networking.setupConn..", "malformed url " + urlString);
}
// if could not get InputStream
return null;
}
public String getStringFromInputStream() {
BufferedReader br = null;
StringBuilder sb = new StringBuilder(5000);
String line;
try {
br = new BufferedReader(new InputStreamReader(mInputStream), 512);
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (java.io.IOException e) {
Log.e("BufferReader(new ..)", e.toString());
return null;
} finally {
if(br != null) {
try {
br.close();
}catch (java.io.IOException e) {
Log.e("br.close", e.toString());
}
}
}
return sb.toString();
}
}
Проблема заключается в том, что функция getStringFromInputStream
всегда возвращает строку, которая имеет длину 4063 байт. ВСЕГДА! Независимо от того, что URL.
я проверил, и (line = br.readLine())
часть кода всегда возвращает строку фиксированной длины 4063.
Я не понимаю этого. Пожалуйста помоги.
что является содержание? Кажется, вам не хватает шага, на котором вы добавляете строку, считываемую в StringBuffer. –
@BrettOkken, который был по ошибке (при копировании, вставляющем код в вопрос). Я добавил строку 'sb.append (строка)'. Но код не работает. – ironstein
Это означает, что ответ всегда один и тот же. Почему вы находите это удивительным? Что такое * * содержание? NB 'connection.setRequestMethod (" GET ")' и 'connection.setDoInput (true)' просто утверждают значения по умолчанию. Они не делают ничего полезного. И когда вы получите исключение, запишите исключение. Не какое-то сообщение о вашем собственном проекте. Вам нужно будет вернуться позже и исправить это, чтобы отладить их, поэтому исправьте это сейчас. – EJP