小编Sok*_*lov的帖子

具有多行标题的CollapsingToolbarLayout

是否可以CollapsingToolbarLayout跨多行(类似于TextView.maxLines属性)进行扩展标题文本换行?

android android-support-library android-support-design

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

Java 8日期/时间(JSR-310)类型与Spring Data MongoDB的映射

我有Java 8日期/时间字段的简单文档

@Document
public class Token {
    private Instant createdAt;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我希望坚持使用Spring Data MongoDB 1.5版.但是类型的字段java.time.Instant无法正确反序列化,因为MappingMongoConverter缺少java.time类的转换器.

在Spring 4中,我发现org.springframework.format.datetime.standard.DateTimeConverters了不同的Converters包括InstantToLongConverterLongToInstantConverter声明为私有静态类.

如何配置MongoTemplate使用它们将Instant字段映射到long?

java java-8 spring-data spring-data-mongodb java-time

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

使用AndroidJUnitRunner 1.0.0和AssertJ检测测试失败

我正在尝试将我的项目更新到最近发布的Android测试支持库版本1.0.0.但是如果我添加assertj-core依赖关系,Gradle检测的测试任务会因"找不到测试"消息而开始失败.我可以成功地从IDE运行个别测试.

很容易重现这个问题:

  1. 使用空活动从Android Studio 3创建新项目.
  2. 添加assertj-core依赖项.
  3. 从命令行运行检测测试./gradlew connectedDebugAndroidTest.

Gradle脚本.

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    implementation 'com.android.support:appcompat-v7:26.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.0'
    androidTestImplementation group: "org.assertj", name: "assertj-core", version: "2.8.0"
}
Run Code Online (Sandbox Code Playgroud)

控制台输出.

com.android.builder.testing.ConnectedDevice > No tests found.
[Nexus_4_API_25(AVD) - 7.1.1] FAILED 
No tests found. This usually means that your test classes are not in the form that your test runner expects (e.g. don't inherit from TestCase or lack …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-support-library assertj

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

Play Framework:文件上传 - 阻止还是非阻止?

给出Play文档中的示例代码:

def upload = Action(parse.temporaryFile) { request =>
  request.body.moveTo(new File("/tmp/picture/uploaded"))
  Ok("File uploaded")
}
Run Code Online (Sandbox Code Playgroud)
  1. 如何处理100个同时缓慢上传的请求(线程数)?
  2. 将上传文件缓存在内存中或直接流式传输到磁盘?

scala playframework

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

带有自定义HTTP客户端的WebView

我的任务是通过HTTPS加载WebView,而不受vanilla Android TLS密码的支持.现在作为概念证明,我已经实现了能够对这些资源进行http请求的apache http客户端.

使WebView使用我的自定义客户端实现来执行所有网络请求的最佳方法是什么?

java android webview apache-httpclient-4.x

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

Reactor groupBy:取消 GroupedFlux 后剩余项目会怎样?

我需要按高基数的键对无限 Flux 进行分组。

例如:

  1. 组密钥是域 url
  2. 对一个域的调用应该严格按顺序进行(下一个调用发生在前一个域完成之后)
  3. 对不同域的调用应该是并发的
  4. 具有相同键(url)的项目之间的时间间隔未知,但预计具有突发性质。在短时间内发出几个项目,然后长时间暂停直到下一组。
queue
    .groupBy(keyMapper, groupPrefetch)
    .flatMap(
       { group ->
           group.concatMap(
               { task -> makeSlowRemoteCall(task) },
               0
           )
           .takeUntil { remoteCallResult -> remoteCallResult == DONE }
           .timeout(groupTimeout, Mono.empty())
           .then()
       }
      , concurrency
    )

Run Code Online (Sandbox Code Playgroud)

我在两种情况下取​​消群组:

  1. makeSlowRemoteCall()结果表明,在不久的将来,该组中很可能不会有新项目。

  2. 期间不会发出下一项groupTimeout。我使用timeout(timeout, fallback)变体来抑制 TimeoutException 并允许 flatMap 的内部发布者成功完成。

我希望未来可能的项目具有相同的密钥来创建新的 GroupedFlux 并使用相同的 flatMap 内部管道进行处理。

但是,如果我取消GroupedFlux 时仍有未请求的项目,会发生什么情况?

groupBy运算符是否将它们重新排队到具有相同密钥的新组中,否则它们将永远丢失。如果稍后什么是解决我的问题的正确方法。我也不确定在这种情况下是否需要将 concatMap()预取设置为 0。

project-reactor

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

正确通知AsyncTaskLoader关于来自后台线程的数据更改

我想AsyncTaskLoader为我的自定义数据源实现:

public class DataSource {
    public interface DataSourceObserver {
        void onDataChanged();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

DataSource将保留已注册观察员的名单,并将通知他们有关变化的信息.CustomLoader将实施DataSourceObserver.问题是如何正确通知,CustomLoader因为Loader.onContentChanged()必须从UI线程调用,但在我的情况下,DataSource操作(和调用DataSourceObserver.onDataChanged())将从后台线程完成.

更新了Selvin提示的想法:

public class CustomLoader extends AsyncTaskLoader<...> implements DataSource.DataSourceObserver {
    private final Handler observerHandler;

    public CustomLoader(Context context) {
        super(context);
        observerHandler = new Handler()
    }

    @Override
    public void onDataChanged() {
        observerHandler.post(new Runnable() {
            @Override
            public void run() {
                onContentChanged();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-loader

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

如何正确从 WebFlux 客户端排出/释放响应主体?

我正在使用 Spring 5 反应式堆栈中的 WebFlux HTTP 客户端来访问外部 REST 服务。我想根据 HTTP 状态处理响应:

  1. 如果状态为 2xx,我想返回Mono反序列化的响应正文。

  2. 如果状态为 404 我想删除响应正文并立即返回 empty Mono

  3. 对于任何其他状态,我想删除响应正文并返回错误 Mono with MyBusinessException.

我的代码如下所示:

webClient.get()
    .uri("/search")
    .syncBody(request)
    .exchange()
    .flatMap { response ->
        when {
            response.statusCode().is2xxSuccessful -> response.bodyToMono(MyResponse::class.java)
            response.statusCode() == NOT_FOUND -> Mono.empty()
            else -> MyBusinessException().toMono<MyResponse>()
        }
     }
Run Code Online (Sandbox Code Playgroud)

当我不需要时,我不想浪费时间来接收和处理响应正文。exchange()方法状态的 JavaDoc

您必须始终使用响应的主体或实体方法之一以确保释放资源。

如果我想耗尽响应主体并立即返回结果,我到底应该怎么做?

java project-reactor spring-webflux

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

Project Reactor:关于错误处理的可能误导性文档

我正在阅读有关错误处理的 Reactor 参考文档,但似乎有些错误。例如本节关于回退方法

Flux.just("key1", "key2")
    .flatMap(k -> callExternalService(k)) 
    .onErrorResume(e -> getFromCache(k)); 
Run Code Online (Sandbox Code Playgroud)

但是onErrorResume()lambda 只接受一个参数e(可抛出错误)。如何k(由通量发射前值),此处引用?

文档中还有其他类似的代码片段。我读错了吗?或者,如果文档确实不正确,我该如何处理这种情况:通过执行具有先前值的替代路径来从错误中恢复?

spring project-reactor

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