Android: StatusLine устарела, какая альтернатива?
Google говорит, что StatusLine теперь устарела, по этой ссылке: https://developer.android.com/sdk/api_diff/22/changes/org.apache.http.StatusLine.html
Я хочу, чтобы фрагмент кода знал, что такое код состояния ответа сервера, а не устаревший.
Каковы альтернативы для этого?
Спасибо
2 ответа
Решение
org.apache.http
Некоторое время пакет устарел из-за проблем с производительностью и другими проблемами, и теперь полностью удаляется, начиная с уровня API 23.
Вы должны использовать HttpURLConnection, в котором есть хорошая документация, которая поможет вам пройти весь процесс.
Если вам нужен код статуса, позвонитеgetResponseCode()
в экземпляре HttpURLConnection.
Вот пример кода:
@Nullable
public NetworkResponse openUrl(@NonNull String urlStr) {
URL url = new URL(urlStr);
// for secure connections, use this: HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
String networkErrorStr;
try {
int responseCode = connection.getResponseCode();
InputStream er = connection.getErrorStream();
if (er != null) {
// if you get here, you'll anticipate an error, for example 404, 500, etc.
networkErrorStr = getResponse(er); // save the error message
}
InputStream is = connection.getInputStream(); // this will throw an exception if the previous getErrorStream() wasn't null
String responseStr = getResponse(is); // the actual response string on success
return new NetworkResponse(responseCode, responseStr);
} catch (Exception e) {
try {
if (connection != null) {
// you have to call it again because the connection is now set to error mode
int code = connection.getResponseCode();
return new NetworkResponse(code, networkErrorStr); // response on error
}
} catch (Exception e1) {
e1.printStackTrace(); // for debug purposes
}
e.printStackTrace(); // for debug purposes
} finally {
if (connection != null) {
connection.disconnect();
}
}
return null;
}
private String getResponse(InputStream is) throws IOException {
StringBuilder builder = new StringBuilder();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
return builder.toString();
}
public static class NetworkResponse { // it is static because you will use it inside a class probably
public NetworkResponse(int code, @Nullable String str) {
// do whatever you want with the data
}
}