Tag: retrofit2

如何在unit testing中处理嘲讽的RxJava2可观察抛出exception

在过去的几个星期里,我一直在Kotlin使用MVP在Android上进行TDD。 事情进展顺利。 我使用Mockito来模拟类,但我似乎无法完成如何执行我想运行的测试之一。 以下是我的测试: 调用API,接收数据列表,然后显示列表。 loadAllPlacesTest() 调用API,接收空数据,然后显示列表。 loadEmptyPlacesTest() 调用API,在路上发生一些exception,然后显示错误信息。 loadExceptionPlacesTest() 我已经成功测试了#1和#2。 问题在于#3 ,我不确定如何在代码中进行测试。 RestApiInterface.kt interface RestApiInterface { @GET(RestApiManager.PLACES_URL) fun getPlacesPagedObservable( @Header(“header_access_token”) accessToken: String?, @Query(“page”) page: Int? ): Observable } RestApiManager.kt实现接口的管理器类如下所示: open class RestApiManager: RestApiInterface{ var api: RestApiInterface internal set internal var retrofit: Retrofit init { val logging = HttpLoggingInterceptor() // set your desired log level […]

404 – 使用Retrofit2和RXJava2调用API时

我有一个与提到的libs下面调用API的问题 我的依赖: compile ‘com.squareup.retrofit2:retrofit:2.1.0’ compile ‘com.squareup.retrofit2:converter-gson:2.1.0’ compile ‘com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0’ compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘io.reactivex.rxjava2:rxjava:2.0.1’ 提供翻新实例的代码 @Provides @Singleton RxJava2CallAdapterFactory provideRxJavaCallAdapter(){ return RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()); } @Provides @Singleton Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient, RxJava2CallAdapterFactory rxJavaCallAdapterFactory){ return new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(rxJavaCallAdapterFactory) .client(okHttpClient) .build(); } Api界面 @GET(“form/{slugOrUUID}”) Observable getForumRx(@Path(“slugOrUUID”) String slugOrUUID); 最后放到我打电话给REST的地方 ForumService forumService = retrofit.create(ForumService.class); Observable photography = forumService.getForumRx(“sample”); photography.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) […]

链接多个RxJava,Room和Retrofit

我正在使用RxJava / Kotlin和Room和Retrofit。 我确信我没有写任何东西,因为我刚开始学习RxJava。 这种情况是我打电话来检查数据库中是否有最喜欢的记录,并将它们放入列表中,从API获取数据并将其插入到数据库中,使用之前的collections夹列表更新数据库,并获取所有记录更新,列表。 我得到了我的片段的结果,但每次我得到它,就好像我得到1不喜欢的项目,直到我没有collections的项目。 Repository fun getKafaniFromApi(): Observable<List> { return apiService.getKafani().toObservable().doOnNext { insertKafaniInDb(it) } } fun getKafaniFromDb(): Observable<List> { return kafanaDao.getKafani().toObservable() } fun insertKafaniInDb(kafani: List) { Observable.fromCallable { kafanaDao.insertAll(kafani) } .subscribeOn(Schedulers.io()) .subscribe { Timber.d(“Inserted ${kafani.size} kafani from API in DB…”) } } fun getFavoriteKafani(): Single<List> { return kafanaDao.getFavoriteKafani() } fun setKafanaFavorite(kafana: Kafana, isFavorite: […]

如何处理Retrofit Rx onError中不同难度的错误

我想知道你的方式来处理不同types的错误(如httpexception,没有互联网连接exception等)在改进Rx onError,而不使用instanceof像这里提出的: 如何在RxJava或在这里处理 Retrofit 2中的网络错误 : Handle改造2 RX中的错误 在kotlin中,我将简单地为每种可投掷项目做一些扩展函数来做我想做的任何事情。 但是我不得不在项目中使用Java。 任何不错的建议? 是这样的构建某种error handling程序的方法: public interface ErrorHandler { void handleError(Exception e); void handleError(HttpException e); void handleError(NullPointerException npe); } 好? 我知道这不是因为每次我需要处理另一个特定的错误,我不得不改变接口,所以这是违反开放原则。 但我找不出任何解决办法。 欢呼Wojtek

Android Rx-java + Kotlin的Retrofit2错误

我正在尝试构建一个MVVM模式的Android应用程序。 除了rx-java部分,一切都很好。 在订阅中使用Observer,我有这样的错误。 Error:(28, 18) None of the following functions can be called with the arguments supplied: public final fun subscribe(p0: ((Flyer!) -> Unit)!): Subscription! defined in rx.Observable public final fun subscribe(p0: Observer!): Subscription! defined in rx.Observable public final fun subscribe(p0: Subscriber!): Subscription! defined in rx.Observable public final fun subscribe(p0: Action1!): Subscription! defined in rx.Observable […]

Android – 使用泛型有一个RxJava翻新调用使用相同的接口返回各种类型

我正在玩泛型,第一次清理一些重复的代码,我有改进的电话。 我能够制作一个通用的改装适配器,所以我的供应商不必每个都有一个独特的创造者,这真是太棒了,令人兴奋。 private fun <T> create(service: Class<T>, baseUrl: String): T { val retrofit = Retrofit.Builder() .client(client) .addConverterFactory(MoshiConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(baseUrl) .build() return retrofit.create(service) } 现在我试图做一个通用的网络调用,但我无法弄清楚,并想知道如果这是甚至可能的改造如何工作? 我现在有5个服务,如下所有,不同的API。 每个人都有不同的终结点,但都接受1个参数,并返回他们的对象,每个API调用略有不同。 interface ServiceA { @GET("v2/ticker") fun getCurrentTradingInfo(@Query("book") orderBook: String): Observable<CurrentTradingInfo> } 所有的响应对象都实现了一个接口来规范响应数据,以便以后可以显示 data class CurrentTradingInfo(val mid: String, val bid: String, val ask: String, val last_price: String, val low: String, val […]

如何将自定义pojo作为参数传递给rxjava2 Observable中的接口方法调用?

当前的代码 Observable.from(listMovie)//list of movie .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { @Override public Observable<FavMovieRes> call(Movie movie) { return moviesAPI.makeMovieFav(userId), sessionId, new MakeMovieFav("movie", movie.getId(), movie.isFavList())); } }) .subscribe(new Subscriber<FavMovieRes>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(FavMovieRes favMovieRes) { } }); 在上面的代码中,我将Movie对象列表传递给Observable,并在结果从API获取结果时对列表中的每个电影实例执行一个操作我想要更改一些有关该电影实例的数据库如何获取OnNext()中的每个Movie实例以及on订阅方法的错误方法。 我想要的是 Observable.from(listMovie) .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { @Override […]

RxAndroid – 重试观察点击

我在Android应用程序中使用rxAndroid和rxKotlin来异步处理网络请求。 现在我想重试一个失败的网络请求,只有点击Snackbar按钮后。 我的代码现在: val citiesService = ApiFactory.citiesService citiesService.cities() .subscribeOn(Schedulers.newThread()) // fetch List<String> .flatMap { Observable.from(it) } // convert to sequence of String .flatMap { city -> citiesService.coordinates(city) // fetch DoubleArray .map { City(city, it) } // convert to City(String, DoubleArray) } .toList() .observeOn(AndroidSchedulers.mainThread()) .doOnNext { listView.setOnItemClickListener { adapterView, view, position, id -> onItemClick(it[position]) } } […]

使用Retrofit2 + RxJava + Jackson重试202状态码

我有一个API,根据不同的场景返回200,202,4xx。 当我得到一个202,我应该做相同的API,直到我得到一个200或4xx。 我尝试使用doOnErrorNext,onError,onNext。 我无法解决这个问题 Observable<MyPOJO> makeAPI(); Observable<MyPOJO> makeAPIImpl(){ makeAPI().doOnErrorNext(/*how to I access the error code here*/); makeAPI().doOnNext(/*given that 202 is a success code, I expected it to come here, but it goes to Error because of JSON Mapping*/); } doOnErrorNext – >我能够再次进行API调用,但它会发生所有我不想要的错误情况 我已经检查了多个关于这个问题的答案,但是没有人专门解决这个问题,并且无法在我的用例中加入其他答案。

为android @Multipart改装删除默认标题

创建@Multipart请求会为每个部分添加这些默认标题(Content-Transfer-Encoding,Content-Type),有什么方法可以删除它们吗? //REQUEST BODY –25d35373-d2c3-46a3-969f-f5a1fd5f781a Content-Disposition: form-data; name="client_id" Content-Transfer-Encoding: binary <– remove this one Content-Type: application/json; charset=UTF-8 <– remove this one Content-Length: 34 "40ccfee680a844780a41fbe23ea89934" // 注:我没有访问服务器,所以我不能让服务器接受这些头。