2015-10-05 21 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' 
}