当前位置: 首页 > 面试题库 >

如何在Android Marshmallow上使用旧版Apache HTTP客户端?

万嘉石
2023-03-14
问题内容

背景

在Android Marshmallow上,Google已完全删除了对Apache HTTP客户端的支持(链接此处),因为与其他替代品相比,它的性能不佳。

这也可能是导致Android Marshmallow上许多应用程序崩溃的原因。

问题

通过将以下行添加到gradle文件中,Google允许你仍然使用此API,而不是内置API:

useLibrary 'org.apache.http.legacy'

所以,这就是我所做的:

dependencies {
    classpath 'com.android.tools.build:gradle:1.3.0'
}

和:

android {
    compileSdkVersion 'android-MNC'
    buildToolsVersion "23.0.0 rc3"
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        applicationId "com.example.user.androidmtest"
        minSdkVersion 'MNC'
        targetSdkVersion 'MNC'
        versionCode 1
        versionName "1.0"
    }

当我尝试它时,它可以很好地编译(没有错误显示,并且我可以运行概念验证应用程序,因为它没有任何特殊的代码),但是当我尝试使用一些我知道的类时,是旧版API(例如“ HttpClient”类)的一部分,我发现它不允许我这样做。

我知道不建议你使用此解决方案,但我们必须至少暂时准备好该应用程序,直到我们100%应对Android Marshmallow应当更改的所有事情,并且我们不希望出现意外情况崩溃的形式。


问题答案:

Android Studio抱怨org.apache.http

org.apache.http.NameValuePair
org.apache.http.client.utils.URLEncodedUtils

不见了。

所以我org.apache.http.legacy.jarAndroid/Sdk/platforms/android-23/optional文件夹中添加了app/libs

我也将此行添加到我的app.gradle文件

compile files('libs/org.apache.http.legacy.jar')

但是,如果你使用更多的库,则可以使用这种方式

compile fileTree(dir: 'libs', include: ['*.jar'])

这解决了我所有由于Google删除了对Apache HTTP客户端的支持而导致的错误。



 类似资料:
  • 我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们

  • 问题内容: 如果我没记错的话,Android准则说您应该将ActionBar用于应用程序内的全局导航。 但是同时,您通常希望定位最古老的API,以实现最大的兼容性。 我正在开始开发应用程序,并将目标设置为Android 2.2。 是否可以在此处使用操作栏?如果没有,我该怎么用? 谢谢凯文 问题答案: 使用ActionBarSherlock。 确保您的项目使用Android 4.0+作为构建目标,并

  • 我们正在AWS上运行elasticsearch,目前支持elasticsearch 6.3作为最新版本。 我们有一个业务案例,需要每天更新索引中的所有文档并删除一个嵌套对象。elasticsearch通过查询API进行了更新,这将解决我们的问题。 但在我们的java应用程序中,我们使用的是java高级rest客户端。rest客户端版本6.5支持按查询更新api。现在,如果我们将rest客户端升级到

  • 我尝试为我的网站提供文件上传/下载服务,并且尝试使用openstack中的对象存储。问题是,我通过php和openstack PHPSDK做这件事没有问题,但是当我试图通过一些javascript做这件事时,我找不到一个好的sdk或方法。我没有使用node,我有一个php服务器和一个javascript客户端。我想直接从javascript客户端上传或下载文件。我不希望文件通过php服务器传输。我

  • 问题内容: 我想在客户端JavaScript应用程序中使用CommonJS模块系统。我选择nodejs作为实现,但是找不到有关如何使用nodejs客户端的任何教程或文档,即不使用 我在HTML页面中包含了像这样的node.js: 请注意,我没有在本地计算机上创建nodejs,无论如何我都在Windows上(我知道Cygwin选项)。当我想在自己的JavaScript中使用该函数时,它说它是未定义的

  • 问题内容: 这听起来像是一个愚蠢的问题,因为的目的恰恰是这样:在虚拟环境中安装某个特定版本的软件包(在本例中为Django)。但这正是我想要做的,我无法弄清楚。 我在Windows XP上,并且成功创建了虚拟环境,并且能够运行它,但是我应该如何在其中安装我想要的Django版本呢?我的意思是,我知道要使用新创建的脚本,但是如何安装Django 1.0.7?如果我这样做,它将安装最新版本。我尝试以各