有什么可以替换http弃用的方法?

时间:2015-05-01 21:58:41

标签: android android-studio androidhttpclient

我正在学习一个教程,并且我已经批准了很多代码。

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 + "");

但我不知道其他人。

3 个答案:

答案 0 :(得分:8)

  

我发现我可以用

替换NameValuePair

不是。

  

但我不了解其他人

不推荐使用Android自带的整个HttpClient API。解决方案是使用不同的HTTP客户端:

关于本教程,要么:

  • 使用不使用已弃用的HTTP API或
  • 的教程
  • 将教程移植到使用Apache的重新打包的HttpClient for Android或
  • 忽略弃用警告

答案 1 :(得分:8)

正如CommonsWare在他的回答中所说,整个http客户端软件包已经被Android 23.0.0构建工具版本所弃用。因此,我们应该更好地使用其他API,例如HttpUrlConnection或任何第三方库,例如VolleyokHttpretrofit

但如果你还想要那些包裹;您可以在应用程序的模块gradle脚本中添加以下依赖项:

dependencies {

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

}

并且不要忘记在项目gradle脚本中添加mavenCentral()

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

添加这些之后;只需将项目与gradle同步即可。并且您将能够再次导入和使用这些API。

<强>更新

感谢@rekire在评论中提到这一点。在这里我也添加了这个,而不是使用上面提到的依赖,你可以在模块的gradle脚本的android DSL中添加useLibrary 'org.apache.http.legacy'。添加如下:

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

希望这会对某人有所帮助。

答案 2 :(得分:1)

您可以将apache的HttpClient替换为HttpURLConnection