我正在学习使用改型进行api调用,但每当我试图从api发出get请求时,我的应用程序就会崩溃,并出现以下错误。。
Java语言lang.IllegalArgumentException:无法为类java创建调用适配器。方法WeatherApi的lang.对象。getweatherbycity
原因:java。lang.IllegalArgumentException:找不到类java的调用适配器。lang.Object。已尝试:*改装2。适配器。rxjava。RxJavaCallAdapterFactory*改装2。改装2处的ExecutorCallAdapterFactory。改装。NextCalAdapter(Reformation.java:237)位于Reform2。改装。Reform2上的callAdapter(Reformation.java:201)。ServiceMethod$生成器。createCallAdapter(ServiceMethod.java:232)。。。29个以上
我尝试了stackoverflow的许多解决方案,但都不起作用,我也是mvvm和视图模型的新手。
类改型实例{
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>
}
我在android studio中使用Json到kotlin转换器插件创建了天气响应类
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'
您在此处得到的响应不正确:
@GET("data/2.5/weather")
suspend fun getweatherbycity(
@Query("q")
cityname: String="London",
@Query("appid")
api_key: String = API_KEY
): Response<WeatherResponse>
因为您使用的是RxJavaCallAdapterFactory,请返回可观察的响应
@GET("data/2.5/weather")
suspend fun getweatherbycity(
@Query("q")
cityname: String="London",
@Query("appid")
api_key: String = API_KEY
): Single<Response<WeatherResponse>>
接口WeatherAp公开
在我的例子中,我在我的API接口方法中使用了暂停
,但是问题是我使用的是Retrofit2 2.3.0,而我应该使用Retrofit2 2.6或更高版本,因为根据这一点,在那个版本中他们添加了对Coroutines的官方支持。
我的API:
interface CoolApi {
@POST("/api/v1/path")
@Headers("@: Noauth")
suspend fun coolApiCall(@Body request: coolRequest): Response<CoolResponse>?
}
改装制造商:
val api = Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(createOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(CoolApi::class.java)
然后我像这样启动协同程序:
lifecycleScope.launch(Dispatchers.IO) {
try {
val response = apiMethod(api)
if (response!!.isSuccessful) {
callback.onSuccess(response.code(), response.body())
} else {
// Error handling
}
} catch (e: Exception) {
when (e) {
// Exception handling
}
}
}
请注意,为了使用lifecycleScope,您需要添加一些依赖项。在我的等级中。生成(:app)我有:
// For lifecycle-aware coroutines
def lifecycle_version = "2.3.1"
// Lifecycles only (without ViewModel or LiveData)
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:1.5.31"
然后您可以从活动或片段中使用lifesycleScope
。如果您在另一个文件中启动协程(这是我的情况),您可以将其作为参数传递。
问题内容: 我正在使用SimpleXml改造2.0.0-beta1。我想从REST服务中检索简单(XML)资源。使用SimpleXML编组/解组Simple对象可以正常工作。 使用此代码(转换为2.0.0之前的代码)时: 服务: 我得到这个异常: 我想念什么?我知道用作品包装返回类型。但是我希望服务将业务对象作为类型返回(并在同步模式下工作)。 更新 添加了额外的依赖关系并根据不同的答案提出建议后
但每次我都收到异常:创建@body转换器 我怎么送?或者其他我能做到的想法。您甚至可以向我提供包含json的简单参数。这对我很合适
错误:java.lang.IllegalArgumentException:无法为apiInterface.postimage方法的rx.Observable创建调用适配器 UPD: 我将接口和其他更改为: 在那之后,我有一个错误(这是不是意味着,我是对的??): 错误:Android.os.NetworkOnMainThreadException UPD3: *E/AndroidRuntime:
我在使用ActiveAndroid对API调用和数据库进行修改。在Pre6.0的Android设备上,一个应用程序可以很好地工作。无法确定根本原因。 改装2 Beta-4。Android6。无法创建转换器 我不明白为什么要使用gson或gsonbuilder? 感谢任何帮助。
适配器目录和文件结构 适配器目录和文件结构布局的例子: /application/libraries/Driver_name Driver_name.php drivers Driver_name_subclass_1.php Driver_name_subclass_2.php Driver_name_subclass_3.php 注意: 为了在大小写敏感的文件系统上维持兼容性,这个 Drive
我一直在开发一个java应用程序,我遇到了一个无法找到答案的问题。我的应用程序是一个postgresql学生数据库,应用程序是在maven中使用MCV模式制作的,对于web部件,我使用Spring和hibernate,因为IDE使用Intellij。 我可以毫无问题地启动它,但在访问localhost页面时,我会出现以下错误: 出现意外错误(类型=内部服务器错误,状态=500)。无法提取结果集;S