小编Sam*_*ter的帖子

用RxJava中的observable替换回调

我使用侦听器作为回调来观察Android的异步操作,但我认为用RxJava替换这个侦听器可能很棒,我是新的使用这个库,但我真的很喜欢它,我总是在Android项目中使用它.

这是我重构的代码:

public void getData( final OnResponseListener listener ){
   if(data!=null && !data.isEmpty()){
       listener.onSuccess();
   }
   else{
       listener.onError();
   }
}
Run Code Online (Sandbox Code Playgroud)

一个简单的回调:

public interface OnResponseListener {
   public void onSuccess();
   public void onError(); 
}
Run Code Online (Sandbox Code Playgroud)

而"观察者":

object.getData( new OnResponseListener() {
    @Override
    public void onSuccess() {
       Log.w(TAG," on success");
    }

    @Override
    public void onError() {
       Log.e(TAG," on error");
    }
});
Run Code Online (Sandbox Code Playgroud)

谢谢!

java rx-java

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

如何等待异步Observable完成

我正在尝试使用rxjava构建一个示例.该示例应协调ReactiveWareService和ReactiveReviewService重新运行WareAndReview组合.

ReactiveWareService
        public Observable<Ware> findWares() {
        return Observable.from(wareService.findWares());
    }

ReactiveReviewService: reviewService.findReviewsByItem does a ThreadSleep to simulate a latency!

public Observable<Review> findReviewsByItem(final String item) {
return Observable.create((Observable.OnSubscribe<Review>) observer -> executor.execute(() -> {
    try {
        List<Review> reviews = reviewService.findReviewsByItem(item);
        reviews.forEach(observer::onNext);
        observer.onCompleted();
    } catch (Exception e) {
        observer.onError(e);
    }
}));
}

public List<WareAndReview> findWaresWithReviews() throws RuntimeException {
final List<WareAndReview> wareAndReviews = new ArrayList<>();

wareService.findWares()
    .map(WareAndReview::new)
.subscribe(wr -> {
        wareAndReviews.add(wr);
        //Async!!!!
        reviewService.findReviewsByItem(wr.getWare().getItem())
            .subscribe(wr::addReview,
                throwable -> System.out.println("Error while trying to find reviews for " + …
Run Code Online (Sandbox Code Playgroud)

java rx-java

12
推荐指数
2
解决办法
4万
查看次数

在每个测试用例之后将单例实例重置为nil

我正在使用OCMock 3来测试我的iOS项目.

我使用dispatch_once()创建了一个单例类MyManager:

@implementation MyManager

+ (id)sharedInstance {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}
Run Code Online (Sandbox Code Playgroud)

我在School课堂上有一个使用上述单例的方法:

@implementation School
...
- (void) createLecture {
  MyManager *mgr = [MyManager sharedInstance];
  [mgr checkLectures];
  ...
}
@end
Run Code Online (Sandbox Code Playgroud)

现在,我想对这个方法进行单元测试,我使用MyManager的局部模拟:

- (void) testCreateLecture {
  // create a partially mocked instance of MyManager
  id partialMockMgr = [OCMockObject partialMockForObject:[MyManager sharedInstance]];

  // run method to test
  [schoolToTest createLecture];
  ... …
Run Code Online (Sandbox Code Playgroud)

singleton unit-testing objective-c ocmock ios

10
推荐指数
2
解决办法
2099
查看次数

Podspec验证错误 - 文件模式:规范为空

我想再次创建我的第一个pod.我很久以前就试过这个,1年前我记得,那个时候我也有类似的错误.

以下代码显示了我的project.podspec文件的样子,我不知道我在这里想念的是什么,CocoaPods只是字面上对我大吼大叫,说podspec文件中有一些问题.

Pod::Spec.new do |s|
  s.name = 'MyProject'
  s.version = '0.1.0'
  s.platform = :ios, '9.0'
  s.license = 'MIT'
  s.summary = 'Something Blah Blah'
  s.homepage = 'https://github.com/alvinvarghese/MyProject'
  s.author = { 'Alvin Varghese' => 'my email' }
  s.source = { :git => 'https://github.com/alvinvarghese/MyProject.git', :tag => s.version.to_s }

  s.description = 'Blah Blah Blah BlahBlah BlahBlah BlahBlah BlahBlah Blah Blah Blah'      \
                  'Blah Blah'
  s.frameworks = 'UIKit', 'Foundation'
  s.social_media_url = 'https://twitter.com/aalvinv'
  s.ios.deployment_target = '9.0'
  # s.resource_bundles = { …
Run Code Online (Sandbox Code Playgroud)

macos ios cocoapods podspec

8
推荐指数
1
解决办法
2544
查看次数

LifecycleRegistry实例何时开始侦听LifecycleOwner的生命周期更改?

我已经开始学习架构组件,但是找不到一件事。

LifecycleFragment仅创建一个新的LifecycleRegistry对象,该对象不会开始观察该片段的生命周期。

我猜想,例如,当我们将LifecycleRegistry对象作为第一参数放入LiveData.observe()时,LifecycleRegistry对象就开始监听该片段的生命周期,但是我在源代码中找不到任何证明。

问题:LifecycleRegistry对象何时以及如何开始观察片段的生命周期并刷新LifecycleRegistry.mState

android android-lifecycle android-architecture-lifecycle

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

使用包含union和类型成员的结构

我正在尝试调试我正在编写的程序,它正在使用C中的libvirt库.

在程序的一部分我将返回以下结构:

struct virTypedParameter {
    char field[VIR_TYPED_PARAM_FIELD_LENGTH];
    int type;
    union {
        int i;
        unsigned int ui;
        long long int l;
        unsigned long long int ul;
        double d;
        char b;
        char *s;
    } value;
}
Run Code Online (Sandbox Code Playgroud)

所以我有一个键,值和值类型.我希望能够通过将它们传递给函数来打印它们.

除了将类型抛入switch语句并重定向到正确的printf语句之外,还有更简单的方法吗?我已经这样做了,它导致在编译时弹出大量警告:

void printVirTypedParameter(virTypedParameter* param) {
    printf("Param type: %d\n", param->type);
    switch(param->type) {
        case 1: //int
            printf("%s : %d\n", param->field, param->value);
            break;
        case 2: //int unsigned
            printf("%s : %u\n", param->field, param->value);
            break;
        case 3: //long long int
            printf("%s : %ld\n", param->field, param->value);
            break;
        case 4: //long long …
Run Code Online (Sandbox Code Playgroud)

c printf libvirt

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