我在Android Studio中创建了一个新的Kotlin项目,我现在正试图在该项目中使用Fuel HTTP library。但是,当我尝试使用GitHub自述文件中的示例中的函数时,我得到两个错误:
"使用提供的参数不能调用以下任何函数。" - 对responseString的引用
"无法推断此参数的类型。请明确说明。" - 关于回调函数的每个参数
这是我正在使用的代码:
package me.myname.morefueltesting
import android.support.v7.app.ActionBarActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import com.github.kittinunf.fuel.Fuel
public class MainActivity : ActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/* First error /--Second errors--\
| | | |
\/\/\/\/\/\/\/ \/\/\/\ /\/\/\/\ /\/\/\ */
Fuel.get("http://httpbin.org/get").responseString({request, response, result ->
// Some callback code here
})
}
}
我的 build.gradle :
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
defaultConfig {
applicationId "me.myname.morefueltesting"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.0'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile 'com.github.kittinunf.fuel:fuel-rxjava:1.3.1'
compile 'com.github.kittinunf.fuel:fuel-android:1.3.1'
}
buildscript {
ext.kotlin_version = '1.0.3'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
repositories {
mavenCentral()
}
如何解决这些错误?
答案 0 :(得分:3)
responseString
中有fun responseString(
charset: Charset = Charsets.UTF_8,
handler: (Request, Response, Result<String, FuelError>) -> Unit): Request
个过载,Readme中有很多用过的签名:
charset
如您所见,第一个参数具有默认值。另请注意,第二个(以及同一个最后一个)参数是没有默认值的lambda。如果您选择使用默认参数值(Fuel.get("http://httpbin.org/get").responseString(handler = {request, response, result ->
// Some callback code her
})
),则还需要为后续参数使用默认值,或者您需要使用named arguments:
Fuel.get("http://httpbin.org/get").responseString {request, response, result ->
// Some callback code her
}
由于:
在Kotlin中,有一个约定,如果最后一个参数为a function是一个函数,该参数可以在。之外指定 括号
您也可以使用自述文件中指定的方法,但不带括号:
system("ping -c 3 192.168.10.1")
答案 1 :(得分:0)
知道了 - 我使用的是一个非常老的Android Studio版本(1.1最新版本是2.1!)。更新Android Studio修复了我提到的所有错误,以及我在修补某些内置SDK函数时所遇到的其他错误。