2015-10-05 20 views
2

我有一个辅助类来确实请求函数,我使用的方法如下。org.apache.http.NameValuePair不再适用于compileSdkVersion 23

private String buildQueryString(String url, List<NameValuePair> params) throws IOException { 
    StringBuilder sb = new StringBuilder(); 
    if (params == null) return url; 

    for (NameValuePair param : params) { 
     sb.append(urlEncode(param.getName())); 
     sb.append("="); 
     sb.append(urlEncode(param.getValue())); 
     sb.append("&"); 
    } 

    return url + "?" + sb.substring(0, sb.length() - 1); 
} 

如果更新我的gradle这个以compileSdkVersion 23,进口org.apache.http.NameValuePair不再存在。我很想知道替换是什么?提前致谢!

编辑-posting gradle-另外,我使用gradle这个-2.4

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
     maven { url 'https://zendesk.artifactoryonline.com/zendesk/repo' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 

android { 
    signingConfigs { 
     debug { 
      storeFile file('keystore/debug/debug.keystore') 
     } 
    } 

    compileSdkVersion 23 
    buildToolsVersion "21.1.2" 
    useLibrary 'org.apache.http.legacy' 

    // jenkins setup 
    def versionPropsFile = file('version.properties') 
    def code = 1; 
    if (versionPropsFile.canRead() && versionPropsFile.exists()) { 
     def Properties versionProps = new Properties() 

     versionProps.load(new FileInputStream(versionPropsFile)) 
     List<String> runTasks = gradle.startParameter.getTaskNames(); 
     def value = 0 
     for (String item : runTasks) { 
      if (item.contains("assembleRelease")) { 
       value = 1; 
      } 
     } 
     code = Integer.parseInt(versionProps['VERSION_CODE']).intValue() + value 
     versionProps['VERSION_CODE'] = code.toString() 
     versionProps.store(versionPropsFile.newWriter(), null) 
    } else { 
     throw new GradleException("Could not read version.properties!") 
    } 

    // construct version name 
    def versionMajor = 2 
    def versionMinor = 3 
    def versionPatch = 9 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 22 
     versionName "${versionMajor}.${versionMinor}.${versionPatch}" 
     versionCode code 
     signingConfig signingConfigs.debug 

     // enabling multidex support 
     multiDexEnabled true 
    } 

    buildTypes { 
     stage { 
       <content removed> 
     } 
     debug { 
       <content removed> 
     } 
     release { 
       <content removed> 
     } 
    } 
    packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
    } 


dependencies { 
    <bunch of dependencies> 
    compile 'com.android.support:support-v4:23.0.1' 
} 

回答

6

您的build.gradle添加此

android { 
    useLibrary 'org.apache.http.legacy' 
} 

org.apache库从API 22废弃,这是取消了对API 23.

变化buildToolsVersion '21.1.2'buildToolsVersion '23.0.1'

或者你应该添加这对你的依赖。

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.cli‌​ent:4.1.2' 

小心使用摇篮1.3 +

+0

并称内机器人导致错误,“未找到摇篮DSL方法:‘useLibrary()’。 – portfoliobuilder

+0

请发布您的完整gradle文件请 –

+0

您需要更改buildToolsVersion“21.1.2”buildToolsVersion '23 .0.1' –

3

为了阐述这个问题,有两种方法可以解决这个问题对于那些面临同样的冲突。正如@Michele指出的那样,useLibrary 'org.apache.http.legacy'可以使用,但你必须记得也更新gradle。

对于API 23:

顶级的build.gradle - /build.gradle

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

模块特定的build.gradle - /app/build.gradle

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.0" 
    useLibrary 'org.apache.http.legacy' 
    ... 
} 

官方文档:
https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

最新机器人gradle这个插件更新日志:http://tools.android.com/tech-docs/new-build-system

解决这个的第二种方法是通过加入以下依赖性

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