我正在使用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
当我有以下模型与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
在iOS中flashScrollIndicators,UIScrollView类上的方法允许您使滚动条像第一次显示视图时一样短暂闪烁.
我在文档中找不到与此等效的Android,使滚动条在可滚动视图(ScrollView,ListView,WebView等)上短暂闪烁.我尝试requestLayout()在视图上发布一个,但是没有用.
我问这个的原因是因为我的视图包含在a中ViewPager,当用户滑动到不同的页面时,该页面通常已经被绘制并且不会闪烁滚动条.
在这里回答我自己的问题
该方法被调用awakenScrollBars并在View类中定义.不幸的是,这个方法是protected你必须子类化ScrollView,ListView或任何你希望它的滚动条闪烁的视图.
另外,在公共方法scrollTo和scrollBy还闪烁滚动条,但只有当滚动位置实际上已经改变了.所以fe listView.scrollBy(0,0)不会起作用,listView.scrollTo(0,0)只有在视图不在顶部时才有效.
如果无法对视图进行子类化,则以下似乎可行,但不可否认它是一种黑客行为:
view.setVisibility(View.INVISIBLE);
view.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
将视图设置为不可见然后立即再次显示似乎不会导致任何重绘,但它具有触发滚动条闪烁的副作用.
我正在尝试理解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) 是否真的有必要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) 我认为最好的做法是将@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) 我有以下代码(*),它使用递归调用提供的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) 我使用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) android ×3
rx-java ×3
spring ×2
spring-boot ×2
asynchronous ×1
autolayout ×1
gradle ×1
ios ×1
java ×1
scrollbar ×1
scrollview ×1
spring-mvc ×1
transactions ×1
validation ×1