Чем я могу заменить устаревшие методы http?

Я следил за учебником и дошел до того, что большая часть кода устарела.

ArrayList<NameValuePair> dataToSend = new ArrayList<>();
dataToSend.add(new BasicNameValuePair("name", user.name));
dataToSend.add(new BasicNameValuePair("age", user.age));

HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParamas.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParamas.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);

HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVER_ADDRESS + "Register.php");

try{
    post.setEntity(new UrlEncodedFormEntity(dataToSend));
    client.execute(post);
}catch (Exception e){
    e.printStackTrace();
}

и еще один метод POST, возвращающий результат

    HttpResponse httpResponse = client.execute(post);

    HttpEntity entity = httpResponse.getEntity();
    String result = EntityUtils.toString(entity);
    JSONObject jObject = new JSONObject(result);

Я обнаружил, что могу заменить NameValuePair на

ContentValues values = new ContentValues();
values.put("name", user.name);
values.put("age", user.age + "");

но я понятия не имею о других.


person Bogdan Daniel    schedule 01.05.2015    source источник
comment
Здесь есть ответ на вашу проблему. Спасибо   -  person UDARA DHARMASENA    schedule 23.03.2016


Ответы (4)


Я обнаружил, что могу заменить NameValuePair на

Не совсем.

но я понятия не имею о других

Весь API-интерфейс HttpClient, поставляемый с Android, устарел. Решение - использовать другой HTTP-клиент:

Что касается учебника, либо:

  • Используйте руководства, в которых не используется устаревший HTTP API, или
  • Перенесите руководство, чтобы использовать переупакованный HttpClient Apache для Android, или
  • Игнорируйте предупреждения об устаревании
person CommonsWare    schedule 01.05.2015

Как уже сказал CommonsWare в своем ответе, весь пакет http-клиента устарел с версией инструмента сборки Android 23.0.0. Поэтому нам лучше использовать какой-нибудь другой API, например HttpUrlConnection, или любую стороннюю библиотеку, например Volley, okHttp или retrofit.

Но если вам все еще нужны все эти пакеты; вы можете добавить следующую зависимость к скрипту gradle модуля вашего приложения:

dependencies {

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

}

и не забудьте добавить mavenCentral() в свой скрипт Gradle проекта:

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

После добавления этих; Просто синхронизируйте проект с gradle. И вы снова сможете импортировать и использовать эти API.

ОБНОВЛЕНИЕ:

Спасибо @rekire за упоминание этого в комментарии. Здесь я тоже добавляю, что вместо использования вышеупомянутой зависимости вы можете просто добавить useLibrary 'org.apache.http.legacy' в свой Android DSL скрипта gradle модуля. Добавьте это, как показано ниже:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    useLibrary 'org.apache.http.legacy'
    //rest things...
}

Надеюсь, это кому-то поможет.

person TheLittleNaruto    schedule 09.09.2015
comment
Я не проверял, но полагаю, что useLibrary 'org.apache.http.legacy' тоже подойдет. - person rekire; 28.10.2015
comment
@ridoy Попробуйте мой обновленный ответ. Более актуально, чем раньше. - person TheLittleNaruto; 12.12.2015

Вы можете заменить HttpClient apache на HttpURLConnection.

person Bojan Kseneman    schedule 01.05.2015

Вам следует попробовать Retrofit, так проще использовать эту библиотеку вместо выполнения HTTP-запросов. Это было сделано для упрощения взаимодействия между java и REST API.

square.github.io/retrofit/

Привожу образец из документации

public interface GitHubService {
   @GET("/users/{user}/repos")
   List<Repo> listRepos(@Path("user") String user);
}

Класс RestAdapter создает реализацию интерфейса GitHubService.

RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build();

GitHubService service = restAdapter.create(GitHubService.class);

Каждый вызов созданной GitHubService отправляет HTTP-запрос на удаленный веб-сервер.

List<Repo> repos = service.listRepos("octocat");
person florent champigny    schedule 01.05.2015