小编Jaa*_*tum的帖子

如何将Android支持存储库添加到Android Studio?

我正在使用Android Studio和外部Android SDK.我已经安装了支持库和支持库.支持存储库位于:

~/Development/Tools/android/sdk/extras/android/m2repository
Run Code Online (Sandbox Code Playgroud)

当我向build.gradle文件中的支持库添加依赖项时,例如:

...

repositories {
    mavenCentral()
}

...

dependencies {
   compile "com.android.support:support-v4:18.0.+"
}
Run Code Online (Sandbox Code Playgroud)

Android Studio找不到支持库(无法解析符号等),Gradle也找不到库:

Gradle: A problem occurred configuring project ':TestAndroidStudio'.
> Failed to notify project evaluation listener.
   > Could not resolve all dependencies for configuration ':TestAndroidStudio:_DebugCompile'.
      > Could not find any version that matches com.android.support:support-v4:18.0.+.
        Required by:
            TestAndroidStudio:TestAndroidStudio:unspecified
Run Code Online (Sandbox Code Playgroud)

如何在Android Studio和/或build.gradle文件中指定Android支持存储库的位置?

android gradle android-support-library android-studio android-gradle-plugin

43
推荐指数
3
解决办法
11万
查看次数

REST控制器中的Spring Boot绑定和验证错误处理

当我有以下模型与JSR-303(验证框架)注释:

public enum Gender {
    MALE, FEMALE
}

public class Profile {
    private Gender gender;

    @NotNull
    private String name;

    ...
}
Run Code Online (Sandbox Code Playgroud)

以及以下JSON数据:

{ "gender":"INVALID_INPUT" }
Run Code Online (Sandbox Code Playgroud)

在我的REST控制器中,我想处理绑定错误(gender属性的无效枚举值)和验证错误(name属性不能为null).

以下控制器方法不起作用:

@RequestMapping(method = RequestMethod.POST)
public Profile insert(@Validated @RequestBody Profile profile, BindingResult result) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这会com.fasterxml.jackson.databind.exc.InvalidFormatException在绑定或验证发生之前产生序列化错误.

经过一番摆弄后,我想出了这个自定义代码,它可以满足我的需求:

@RequestMapping(method = RequestMethod.POST)
public Profile insert(@RequestBody Map values) throws BindException {

    Profile profile = new Profile();

    DataBinder binder = new DataBinder(profile);
    binder.bind(new MutablePropertyValues(values));

    // validator is instance of LocalValidatorFactoryBean class
    binder.setValidator(validator); …
Run Code Online (Sandbox Code Playgroud)

validation spring spring-mvc spring-boot spring-restcontroller

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

使滚动条从代码中闪烁(如iOS flashScrollIndicators)

在iOS中flashScrollIndicators,UIScrollView类上的方法允许您使滚动条像第一次显示视图时一样短暂闪烁.

我在文档中找不到与此等效的Android,使滚动条在可滚动视图(ScrollView,ListView,WebView等)上短暂闪烁.我尝试requestLayout()在视图上发布一个,但是没有用.

我问这个的原因是因为我的视图包含在a中ViewPager,当用户滑动到不同的页面时,该页面通常已经被绘制并且不会闪烁滚动条.

在这里回答我自己的问题

该方法被调用awakenScrollBars并在View类中定义.不幸的是,这个方法是protected你必须子类化ScrollView,ListView或任何你希望它的滚动条闪烁的视图.

另外,在公共方法scrollToscrollBy还闪烁滚动条,但只有当滚动位置实际上已经改变了.所以fe listView.scrollBy(0,0)不会起作用,listView.scrollTo(0,0)只有在视图不在顶部时才有效.

如果无法对视图进行子类化,则以下似乎可行,但不可否认它是一种黑客行为:

view.setVisibility(View.INVISIBLE);
view.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)

将视图设置为不可见然后立即再次显示似乎不会导致任何重绘,但它具有触发滚动条闪烁的副作用.

android scrollbar scrollview

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

RxJava:包含异步调用的observable

我正在尝试理解RxJava并遇到以下情况.

请考虑以下方法,该方法返回一个可观察的调用NsdManager.registerService.registerService方法需要一个在注册成功(或失败)时调用的侦听器.

public Observable<Boolean> registerService() {
    return Observable.create(new Observable.OnSubscribe<Boolean>() {

        @Override
        public void call(Subscriber<? super Boolean> subscriber) {
            nsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);

            // how to proceed?
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

只有在调用侦听器之后,观察者才能提供通知,但是异步调用侦听器.

我怎么能用RxJava做到这一点?


我使用BehaviorSubject想出了以下内容.不知道它是否是最佳解决方案,但它确实有效.

private BehaviorSubject<Boolean> registrationSubject;

public Observable<Boolean> registerService() {
    registrationSubject = BehaviorSubject.create();

    Observable.create(new Observable.OnSubscribe<Boolean>() {
        @Override
        public void call(Subscriber<? super Boolean> subscriber) {
            NsdServiceInfo serviceInfo  = new NsdServiceInfo();
            serviceInfo.setServiceName(serviceName);
            serviceInfo.setServiceType(NSD_SERVICE_TYPE);
            serviceInfo.setPort(serverSocket.getLocalPort());

            nsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, registrationListener);
        }
    }).subscribe(registrationSubject);

    return registrationSubject;
}

private NsdManager.RegistrationListener registrationListener = new NsdManager.RegistrationListener() {
    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

java asynchronous reactive-programming rx-java

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

RxAndroid:什么时候使用bindActivity?为什么?

是否真的有必要AndroidObservable.bindActivity(...)在下面的活动中使用?因为您仍然需要手动取消订阅onDestroy.

根据这篇博文,bindActivity是必要的,所以:

在有效的情况下,你不小心尝试改变状态

哪个 - 我读它的方式 - 意味着当你在finish()调用之后用活动做某些事情时会出现问题,因此在onDestroy中取消订阅会为时已晚.

任何人都可以给我一个例子,说明何时在onDestroy中取消订阅实际上是一个问题?


如果你看一下AndroidObservable.java用于bindActivity谓词函数为:

private static final Func1<Activity, Boolean> ACTIVITY_VALIDATOR = new Func1<Activity, Boolean>() {
@Override public Boolean call(Activity activity) {
        return !activity.isFinishing();
    }
};
Run Code Online (Sandbox Code Playgroud)

检查配置更改不是更好,例如:

private static final Func1<Activity, Boolean> ACTIVITY_VALIDATOR = new Func1<Activity, Boolean>() {
@Override public Boolean call(Activity activity) {
        return !activity.isFinishing() && !activity.isChangingConfigurations();
    }
};  
Run Code Online (Sandbox Code Playgroud)

???


SomeActivity.java

public class SomeActivity extends Activity implements Observer<String> {
    private Subscription subscription; …
Run Code Online (Sandbox Code Playgroud)

android rx-java

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

在@Service类上(而不是控制器上),Spring Boot @Transactional无法正常工作

我认为最好的做法是将@Transactional注释放在服务层类上,而不要放在控制器上(请参阅fe 为什么我们不应该将Spring MVC控制器设为@Transactional?)。但这不适用于我的Spring Boot应用程序。这是为什么?

registerAction控制器中的方法(请参见下面的代码)执行多个服务调用。当fe mailService.sendActivationMail(...)失败时,我想从userService.registerUser(...)呼叫中回滚插入的用户。是否需要将@Transactional注释放在控制器类上?

@Transactional在控制器类上设置注释时,我的Spring Boot应用程序正确使用事务:

AuthController.java

@RestController
@RequestMapping("/api/auth")
@Transactional
public class AuthController {

    @Autowired
    private UserService userService;

    @Autowired
    private ProfileService profileService;

    @Autowired
    private MailService mailService;

    @RequestMapping(path = "register", method = RequestMethod.POST)
    public Profile registerAction(@Valid @RequestBody Registration registration) {
        ApiUser user = userService.registerUser(registration);
        Profile profile = profileService.createProfile(user, registration);

        mailService.sendActivationMail(user);

        return profile;
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,当在@TransactionalService类上(而不是在控制器上)设置注释时,事务不起作用:

UserService.java

@Service
@Transactional
public class UserService {

    @Autowired
    private ApiUserRepository userRepository; …
Run Code Online (Sandbox Code Playgroud)

spring transactions spring-boot

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

RxJava:调用onError而不完成/取消订阅

我有以下代码(*),它使用递归调用提供的observable的调度程序实现轮询.

(*)灵感来自https://github.com/ReactiveX/RxJava/issues/448

当我只将onNext事件传递给订阅者时,这正常工作.但是当我将onError事件传递给订阅者时,将调用取消订阅事件,这反过来会导致调度程序被杀死.

我还想将错误传递给订阅者.任何想法如何实现?

public Observable<Status> observe() {
    return Observable.create(new PollingSubscriberAction<>(service.getStatusObservable(), 5, TimeUnit.SECONDS));
}

private class PollingSubscriberAction<T> implements Observable.OnSubscribe<T> {
    private Subscription subscription;
    private Subscription innerSubscription;
    private Scheduler.Worker worker = Schedulers.newThread().createWorker();

    private Observable<T> observable;
    private long delayTime;
    private TimeUnit unit;

    public PollingSubscriberAction(final Observable<T> observable, long delayTime, TimeUnit unit) {
        this.observable = observable;
        this.delayTime = delayTime;
        this.unit = unit;
    }

    @Override
    public void call(final Subscriber<? super T> subscriber) {
        subscription = worker.schedule(new Action0() {
            @Override
            public …
Run Code Online (Sandbox Code Playgroud)

error-handling rx-java

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

Autolayout/masonry中心有多个视图

我使用Masonry在代码中创建自动布局约束.

这是我到目前为止:

最佳

使用以下代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor whiteColor]];

    UIView *container = [[UIView alloc] init];
    [self.view addSubview:container];

    UIView *itemContainer = [[UIView alloc] init];
    [itemContainer setBackgroundColor:[UIColor colorWithWhite:0.9 alpha:1.0]];
    [container addSubview:itemContainer];

    UIImageView *itemImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Test"]];
    [itemContainer addSubview:itemImage];

    UILabel *itemTitle = [[UILabel alloc] init];
    [itemTitle setNumberOfLines:1];
    [itemTitle setText:@"Lorem ipsum dolor sit amet."];
    [itemTitle setFont:[UIFont boldSystemFontOfSize:12]];
    [itemTitle setTextColor:[UIColor blackColor]];
    [itemContainer addSubview:itemTitle];

    UILabel *itemText = [[UILabel alloc] init];
    [itemText setNumberOfLines:2];
    [itemText setText:@"Lorem ipsum dolor sit amet, consectetur adipiscing …
Run Code Online (Sandbox Code Playgroud)

ios autolayout masonry-ios-osx

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