我正在学习使用改型进行API调用,但每当我试图从API发出获取请求时,我的应用程序崩溃并给出以下错误。
异常错误:无法为方法WeatherApi的java.lang.Object类创建调用适配器。getweatherbycity
错误原因:java.lang.非法参数异常:找不到类java. lang. Object的调用适配器。已尝试:2007年12月28日,在北京,一个叫“中国制造”的公司,在一个叫“中国制造”的公司,在一个叫“中国制造”的公司,在一个叫“中国制造”的公司,在一个叫“中国制造”的公司,在一个叫“中国制造”的公司,在一个叫“中国制造”的公司,在一个叫“中国制造”的公司。
我尝试了许多解决方案,从stackoverflow,但没有工作,我也是新的mvvm和viewmodels的东西。
类改造示例{
companion object{
private val retrofit by lazy{
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build()
}
val api by lazy{
retrofit.create(WeatherApi::class.java)
}
}
}
接口WeatherApi {
@GET("data/2.5/weather")
suspend fun getweatherbycity(
@Query("q")
cityname: String="London",
@Query("appid")
api_key: String = API_KEY
): Response<WeatherResponse>
}
我已经创建了天气响应类使用Json到Kotlin转换器插件在Android工作室
data class WeatherResponse(
val base: String,
val clouds: Clouds,
val cod: Int,
val coord: Coord,
val dt: Int,
val id: Int,
val main: Main,
val name: String,
val sys: Sys,
val timezone: Int,
val visibility: Int,
val weather: List<Weather>,
val wind: Wind
)
class WeatherRepository{
suspend fun getweatherbycityname(cityname:String)=RetrofitInstance.api.getweatherbycity(cityname)
}
class WeatherViewModel(
val weather_rep: WeatherRepository
):ViewModel() {
val current_weather:MutableLiveData<Response<WeatherResponse>> = MutableLiveData()
fun getweatherbycity(city:String="London")= viewModelScope.launch {
val weather=weather_rep.getweatherbycityname(city)
//current_weather.postValue(weather)
}
}
相依性-
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
4条答案
按热度按时间m528fe3b1#
在我的例子中,我在API接口方法中使用了
suspend
,但问题是我使用的是Retrofit2 2.3.0,而我应该使用Retrofit2 2.6或更高版本,因为根据this,在那个版本中他们添加了对Coroutines的官方支持。我的API:
改造生成器:
然后我像这样启动协程:
注意为了使用
lifecycleScope
,你需要添加一些依赖项。在我的gradel.build (:app)
中,我有:然后你可以从Activity或Fragment中使用
lifecycleScope
。如果你在另一个文件中启动协程(我的例子就是这样),你可以把它作为一个参数传递。5f0d552i2#
您在此处得到的响应是错误的:
因为您使用的是RxJavaCallAdapterFactory,请返回observeable以获得响应
bogh5gae3#
接口WeatherAp将其公开
cvxl0en24#
它的发生同样的事情对我来说,我只是更新了改造版本从build.gradle和工程。尝试更新改造版本。