当前位置: 首页 > 知识库问答 >
问题:

如何在Android Marshmallow上使用传统Apache HTTP客户端?

胡玉书
2023-03-14

在Android Marshmallow上,Google已经完全删除了对Apache HTTP客户端的支持(链接在这里),因为它与替代方案相比没有良好的性能。

这也可能是导致如此多的应用程序在AndroidMarshmallow上崩溃的原因。

Google允许您仍然使用此API,只是不作为内置API,通过在gradle文件中添加以下行:

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应该改变的所有事情,并且我们不希望以崩溃的形式出现意外。

下面是一个截图:

为什么会发生这种情况?我用对了吗?

编辑:此处报告了此问题:

https://code.google.com/p/android/issues/detail?id=181474

共有3个答案

督烨赫
2023-03-14

完美的解决方案是运行一个简单的文件路径检查。通过跑步

   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"

    }

        getBootClasspath().each{File file ->
           println file.absolutePath
        }
    }
}

您将得到以下内容:

/Users/“yourname/”Development/android sdk macosx/platforms/androidmnc/androd。jar/Users/“yourname”/Development/android sdk macosx/platforms/androidmnc/optional/org.apache.http.legacy.jar

你看,罐子在那里。由于某种原因,它没有被添加到项目中。但是我想你总是可以手动添加的。

饶元章
2023-03-14

useLibrary'org.apache.http.legacy'并不适用于我,直到我在我的Android Studio项目的主build.gradle文件中升级了Gradle工具版本,如下所示:

dependencies {
    classpath 'com.android.tools.build:gradle:1.3.0'
}
翟博雅
2023-03-14

Android Studio抱怨说< code>org.apache.http类

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

失踪了。

因此,我将< code > Android/Sdk/platforms/Android-23/optional 文件夹中的< code > org . Apache . http . legacy . jar 添加到< code>app/libs中

我还将这一行添加到我的<code>应用程序中。gradle文件

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

但是,如果您使用的是更多库,则可以通过这种方式使用。

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

这解决了我所有的错误,这些错误是由谷歌删除了对Apache HTTP客户端的支持而引起的。

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

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

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

  • 问题内容: 我正在开发一个具有文件上传HTML控件的组件,使用该控件选择图像后,该图像将呈现在HTML5 Canvas元素上 id = target 是jcrop图像目标 id = photograph 是文件上传控件 id =预览 是canvas元素 id = clear_selection 是一个可以清除画布的按钮 使用的第三方JS库: 设置JCrop: 清除画布按钮单击事件: 在jcrop面

  • 以下是AWS Amplify GraphQL客户端的官方文档:https://aws-amplify.github.io/amplify-js/media/api_guide.html.本节提供了基本输入的示例。 对于AWS Mobile Appsync SDK For Javascript,这里有一个详细的文档:https://docs.aws.amazon.com/appsync/latest

  • 问题内容: 背景 在Android Marshmallow上,Google已完全删除了对Apache HTTP客户端的支持(链接此处),因为与其他替代品相比,它的性能不佳。 这也可能是导致Android Marshmallow上许多应用程序崩溃的原因。 问题 通过将以下行添加到gradle文件中,Google允许你仍然使用此API,而不是内置API: 所以,这就是我所做的: 和: 当我尝试它时,它