小编Jer*_*man的帖子

使用RxJava和Retrofit的定期HTTP请求

是否可以使用RxJava/RxAndroid和Retrofit执行定期的http请求,每隔x秒更新一次数据?

目前我正在使用一个每x秒触发的IntentService和Recursive Handler/Runnable.我想知道我是否可以删除所有这些并让RxJava处理请求.

final RestClient client = new RestClient();
final ApiService service = client.getApiService();

public interface ApiService {
    @GET("/athletes")
    public Observable<List<Athlete>> getAthletes();
}

service.getAthletes()
.retry(3)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Athlete>>() {
    @Override
    public void call(List<Athlete> athletes) {
        // Handle Success
    }
}, new Action1<Throwable>() {
    @Override
    public void call(Throwable throwable) {
        // Handle Error
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑

完成所有操作后,我最终得到了以下代码.欢迎任何更新.

final Scheduler scheduler = Schedulers.from(Executors.newSingleThreadExecutor());

obs = Observable.interval(30, TimeUnit.SECONDS, scheduler)
            .flatMap(tick -> service.getAthletes(1, 0l))
            // Performed on service.getAthletes() observable
            .subscribeOn(scheduler)
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(err -> …
Run Code Online (Sandbox Code Playgroud)

android rx-java retrofit rx-android

24
推荐指数
1
解决办法
5287
查看次数

Xcode 5故事板编译失败

我正在运行Xcode 5并为iOS 7构建.当我尝试构建此项目以进行存档时,我收到此错误.我在我的本地机器和我的jenkins构建服务器上得到它.我已经浏览了故事板,我没有找到任何理由来解决这个错误.它在模拟器和设备上构建得很好.我甚至不确定runtime.nib是什么,尽管addEditHCPViewController.nib是对故事板内部的一个视图控制器的引用.有任何想法吗?

CompileStoryboard myApp/Profiles.storyboard
    cd "/builds/Company/workspace/myApp"
    setenv IBSC_MINIMUM_COMPATIBILITY_VERSION 6.1
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    setenv XCODE_DEVELOPER_USR_PATH /Applications/Xcode.app/Contents/Developer/usr/bin/..
    /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool --errors --warnings --notices --minimum-deployment-target 6.1 --output-format human-readable-text --compile /builds/Company/workspace/myApp/build/Distribution-iphoneos/myApp.app/Profiles.storyboardc /builds/Company/workspace/myApp/myApp/Profiles.storyboard
/* com.apple.ibtool.document.warnings */
/builds/Company/workspace/myApp/myApp/Profiles.storyboard:jlW-RT-oUY: warning: 2 views are vertically ambiguous.
/builds/Company/workspace/myApp/myApp/Profiles.storyboard:1Qm-h4-IZr: warning: Position is ambiguous for "Picker".
/builds/Company/workspace/myApp/myApp/Profiles.storyboard:d8p-iA-2QW: warning: Frame for "Button" will be different at run time.
/* com.apple.ibtool.errors */
/builds/Company/workspace/myApp/myApp/Profiles.storyboard: error: Compilation failed. Unable to write to path: /builds/Company/workspace/myApp/build/Distribution-iphoneos/myApp.app/Profiles.storyboardc
    Underlying Errors:
        Description: The file “runtime.nib” doesn’t exist.
        Failure Reason: The file …
Run Code Online (Sandbox Code Playgroud)

iphone xcode objective-c ios jenkins

14
推荐指数
2
解决办法
6810
查看次数

Kotlin扩展功能按类型

基于类型向类添加函数的惯用方法是什么?以下示例使用List作为类,Type Parameter <T>是列表中的对象类.假设您希望根据类型使用不同的比较器对每个列表进行排序.

data class A(val foo: String)
data class B(val bar: Int)

private val aComparator: Comparator<A> = Comparator { lhs, rhs -> rhs.foo.compareTo(lhs.foo) }
private val bComparator: Comparator<B> = Comparator { lhs, rhs -> rhs.bar.compareTo(lhs.bar) }

fun <T: A> List<T>.sort(): List<T> {
    return this.sortedWith<T>(aComparator)
}

fun <T: B> List<T>.sort(): List<T> {
    return this.sortedWith<T>(bComparator)
}
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误,指出由于Java的重载规则,两个排序函数具有相同的签名.在Java中,我可能会给它们两个不同的可识别名称,但它作为Kotlin扩展(egasortA()b.sortB())相当丑陋.Kotlin没有向List <B>显示sortA,所以似乎有更好的方法来编写sort()来处理不同对象上的不同比较器.

这个例子非常简单,但想象一下,如果我没有修改类A和B的权限,那么我就无法使用继承或在它们上实现接口.我还考虑过为每个类添加一个比较器并使用Any?但这似乎也很麻烦.

kotlin kotlin-extension

4
推荐指数
1
解决办法
1164
查看次数

列表回调参数上的Kotlin通配符捕获

Java的:

public class JavaClass implements ModelController.Callback {

    @Override
    public void onModelsLoaded(@NonNull List<? extends Model> models) {
        doSomething(models);
    }

    private void doSomething(List<Model> models) { }

}
Run Code Online (Sandbox Code Playgroud)

科特林:

class ModelController {
    var callback = WeakReference<Callback>(null)

    interface Callback {
        fun onModelsLoaded(models: List<Model>)
    }

    fun someFunction() {
        callback.get().onModelsLoaded(ArrayList<Model>())
    }
}

interface Model {

}
Run Code Online (Sandbox Code Playgroud)

没有?在Java onModelsLoaded方法中扩展Model,覆盖与Kotlin中的接口不匹配.有了它,我收到以下错误:

doSomething(<java.util.List<com.yada.Model>) cannot be applied to (java.util.List<capture<? extends com.yada.Model>>)
Run Code Online (Sandbox Code Playgroud)

为什么需要通配符捕获,为什么不允许它用于非通配符方法?

kotlin

3
推荐指数
1
解决办法
769
查看次数