小编Sve*_*obs的帖子

以同步方式执行异步调用

在过去的几个小时里,我一直试图绕过这个问题,但无法理解.我想我还是要习惯函数式编程风格;)

我编写了一个递归函数,遍历目录结构并对某些文件执行操作.此函数使用异步IO方法.现在我想在整个遍历完成时执行一些操作.

如何在执行所有parse调用但仍使用异步IO功能后确保执行此操作?

var fs = require('fs'),
    path = require('path');

function parse(dir) {
    fs.readdir(dir, function (err, files) {
        if (err) {
            console.error(err);
        } else {                
            // f = filename, p = path
            var each = function (f, p) {
                return function (err, stats) {
                    if (err) {
                        console.error(err);
                    } else {
                        if (stats.isDirectory()) {
                            parse(p);
                        } else if (stats.isFile()) {
                            // do some stuff
                        }
                    }
                };
            };

            var i;
            for (i = 0; i < files.length; i++) …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js

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

Jetpack Compose:所有项目高度相同的行

我正在尝试在 Compose 中实现一个布局,其中水平滚动的项目Row应具有相同的高度,因此较小的项目应调整为行中最大项目的大小。我知道内在大小,但我就是无法让它发挥作用。另外,我不想为 分配固定高度Row,因为 Row 的高度也应该是其最大子可组合项的高度。

这是简化的布局

@Composable
fun Screen(
    modifier: Modifier = Modifier,
) {
    Row(
        modifier = modifier
            .height(IntrinsicSize.Min)
            .horizontalScroll(state = rememberScrollState()),
        horizontalArrangement = Arrangement.spacedBy(10.dp),
    ) {
        Item(
            text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy " +
                    "eirmod tempor invidunt ut labore et dolore magna aliquyam"
        )

        Item(
            text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy " +
                    "eirmod tempor invidunt …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack android-jetpack-compose

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

摆脱Dagger 2警告"生成一个MembersInjector"

鉴于以下课程

abstract class AbstractClass {
    @Inject SomeDependency someDependency;
}

class SomeClass extends AbstractClass {
    @Inject AnotherDependency anotherDepenency;

    public void onCreate() {
        component = // Get component instance somehow
        component.inject(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

在Dagger 2中,当将依赖项注入到从包含依赖项的抽象基类扩展的类中时,Dagger Generating a MembersInjector for AbstractClass. Prefer to run the dagger processor over that class instead.在编译期间显示了该类型的警告.

但是,如果我重写/实现onCreate()AbstractClass并调用依赖注入有,也依赖someDependency将被注入这两次可能会导致意外的行为.一旦onCreate()AbstractClass和一次onCreate()SomeClass.

在防止重复注入依赖项的同时摆脱此警告的最佳解决方案是什么?

java dagger dagger-2

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

从抽象类继承的Case类

我正在学习Scala,我在设计案例类时遇到了一些问题.我需要两个具有相同属性的案例类.所以我认为从一个定义这些属性的抽象基类继承是个好主意.但是这段代码无法编译

abstract class Resource(val uri : String)

case class File(uri : String) extends Resource(uri)
case class Folder(uri : String) extends Resource(uri)
Run Code Online (Sandbox Code Playgroud)

因为uri在这种情况下类构造函数会覆盖uri基类的属性.

设计这个的正确方法是什么?

我希望能够做这样的事情

val arr = Array[Resource](File("test"), Folder("test2"))

arr.foreach { r : Resource => r match {
  case f : File => println("It's a file")
  case f : Folder => println("It's a folder")
} }
Run Code Online (Sandbox Code Playgroud)

"等效"Java代码应该是这样的

abstract class Resource {
   private String uri;

   public Resource(String uri) {
       this.uri = uri
   }

   public String getUri() { …
Run Code Online (Sandbox Code Playgroud)

inheritance scala class case

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

干净地绑定/解除绑定到应用程序中的服务

我有一个绑定到持久服务的Android应用程序(一旦启动startService()).

该服务是应用程序不可或缺的一部分,因此几乎在每个Activity中都使用.因此,我想只绑定一次服务(而不是在每个Activity中绑定/解除绑定)并在我的应用程序的生命周期内保持绑定.

我已经从Application扩展并绑定到Application#onCreate()中的服务.但是我现在遇到的问题是我不知道我的应用程序何时存在,因为从未调用Application#onTerminate(),请参阅JavaDoc:

此方法用于模拟过程环境.永远不会在生产Android设备上调用它,只需杀死它们即可删除进程; 这样做时不会执行任何用户代码(包括此回调).

那么如何从Application中绑定的服务中干净地取消绑定?

service android bind unbind

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

Scala类型(推理)问题?

我正在使用Jersey JAX-RS参考实现在Scala中开发REST Web服务,我遇到了一个奇怪的错误.

我正在尝试使用ContentDisposition.ContentDispositionBuilder创建ContentDisposition对象.

ContentDisposition.ContentDispositionBuilder有两种类型T extends ContentDisposition.ContentDispositionBuilderV extends ContentDisposition.该方法typeContentDisposition返回建设者实例.

代码

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).build()
Run Code Online (Sandbox Code Playgroud)

然而有效

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()
Run Code Online (Sandbox Code Playgroud)

产生编译错误

error: value build is not a member of ?0
val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM).fileName("dummy").build()
                                                                                                         ^
Run Code Online (Sandbox Code Playgroud)

(注意,type需要将其放在"引号"中,因为它是Scala中的关键字)

fileNameContentDispositionBuilder返回的实例T所以这应该实际工作.

我不懂.任何的想法?我顺便使用Scala 2.9.0.1.

更新:

这有效.但为什么我需要这里的铸造?

val contentDisposition = ContentDisposition.`type`(MediaType.APPLICATION_OCTET_STREAM)
  .fileName("dummy")
  .asInstanceOf[ContentDisposition.ContentDispositionBuilder[_,_]]
  .build()
Run Code Online (Sandbox Code Playgroud)

types scala inference jersey

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

Flutter“添加 2 个应用程序”Android 集成,并调整生成的 .android

我正在开发具有 3 年以上 Kotlin 开发经验的 Android 应用程序,并希望逐步将其迁移到 Flutter 功能。我使用“添加 2 个应用程序”集成的选项 B,其中我依赖于模块的源代码。Flutter 编写的功能通过FlutterActivity或集成到原生 Android 应用程序中FlutterFragment。这对第一个功能很有用,但是现在我在迁移第二个功能时遇到了问题。第二个功能需要包camerafirebase_ml_vision. 现在的问题是camera需要最小 SDK 为 21,但生成的 Android 代码.android将最小 SDK 设置为 16。另外firebase_ml_vision需要初始化 Firebase,这也需要添加到.android. 我正在考虑添加.android到 VCS 并添加所需的更改,但这是生成的代码。它在flutter clean被调用和生成时被删除flutter pub get。当 Flutter 更改/删除它时,我将不得不不断调整生成的代码:(.android仅托管在 Flutter 项目从 IDE(或命令行)运行时启动的“骨架”Android 应用程序。它不是主机应用程序(旧的原生应用程序),其中已经配置了 Firebase。但是,该.android应用程序用于快速开发周期。如果由于上述限制我无法再使用它,我将始终必须启动原生 Android 应用程序(主机)并失去许多好处Flutter 像热重载 :( 有没有人遇到过同样的问题?

更新:

本文中,他们明确指出.android不应修改或添加到 VCS。他们甚至以该camera模块为例。但是,这不起作用,可以通过几个简单的步骤重现: …

android flutter

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

我应该使用哪种Java RMI/RPC/IPC技术?

我正在开发一个Java应用程序,它包含一个服务器和一个客户端(将来可能有多个客户端),可以在不同的主机上运行.

对于这两者之间的通信,我目前使用自定义协议,该协议由通过网络套接字发送的JSON消息组成,并且两端都转换回Java Bean对象.然而,应用程序越复杂,我注意到这种方法不符合我的标准并且过于复杂.

我正在寻找一个完善的,可能标准化的替代方案.

我已经看过远程方法调用(RMI),但是读到协议很慢(网络开销很大).

我正在寻找的技术应该是轻量级的(协议和库明智的),健壮的,可能支持压缩(如果它支持大的话!),可能支持加密,良好的文档和良好的建立(例如Apache项目).它应该像使用RMI调用远程对象上的方法一样简单,但没有缺点.

你能推荐什么?

java rpc ipc rmi

6
推荐指数
2
解决办法
6253
查看次数

如何在迭代集合时防止嵌套的同步块

在多线程Java应用程序中,我需要迭代一组对象.由于在我迭代它们时,另一个线程可以修改集合和对象,我需要使用同步.

但是不建议使用嵌套的同步块,因为它们可能导致死锁.我该如何解决这个问题?

Collection<Data> dataCollection = something.getDataCollection();

synchronized ( dataCollection ) {
  for ( final Data data : dataCollection ) {
    synchronized ( data ) {
      data.doSomething();  // doSomething() changes object state
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization nested

6
推荐指数
2
解决办法
2184
查看次数

Java Hashtable #hashCode()实现坏了吗?

我想知道Hashtable#hashCode()Hashtable只包含每对具有相同键和值的条目时,Java的默认实现是否被破坏.

请参阅以下应用程序:

public class HashtableHash {
    public static void main(final String[] args) {
        final Hashtable<String, String> ht = new Hashtable<String, String>();

        final int h1 = ht.hashCode();
        System.out.println(h1); // output is 0

        ht.put("Test", "Test");

        final int h2 = ht.hashCode();
        System.out.println(h2); // output is 0 ?!?

        // Hashtable#hashCode() uses this algorithm to calculate hash code
        // of every element:
        //
        // h += e.key.hashCode() ^ e.value.hashCode()
        //
        // The result of XOR on identical hash codes is always …
Run Code Online (Sandbox Code Playgroud)

java hashtable hashcode

6
推荐指数
2
解决办法
501
查看次数

关闭 Internet Explorer 浏览器后退按钮上的表单字段自动完成功能

有一些问题解释了如何关闭表单字段的自动完成功能,但是我在这里有一个具体问题:

我已将 设为autocomplete="off"<form>所有表单字段。当用户使用浏览器后退按钮从表单目标页面返回到原始页面(包含表单)时,我想防止浏览器预填充字段。表单字段使用一些不支持预填充值的 jQuery UI 小部件。用户在提交表单之前必须与表单进行交互。

这在 Firefox、Chrome、Safari 中按预期工作。但是它在 Internet Explorer 中不起作用(我测试了版本 8 和 9)。当通过浏览器的后退按钮返回页面时,IE 仍然会填写字段。

这是一个静态 HTML 页面,因此我无法执行一些后端操作,例如设置随机表单字段名称/ID。

我能做些什么?

html forms internet-explorer autocomplete

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

使用Bouncy Castle的AES 256bit加密:仍然需要无限强度政策?

我想在Bouncy Castle中使用AES 256位加密,我想知道是否仍然需要" Java密码学扩展(JCE)无限强度管辖权政策文件 ",因为我收到java.security.InvalidKeyException: Illegal key size以下代码的例外:

public class AES256 {
    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        final KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(256); // doesn't work for 192, too

        final byte[] encoded = keyGen.generateKey().getEncoded();

        final SecretKeySpec keySpec = new SecretKeySpec(encoded, "AES");
        final Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
        // Please ignore static IV for this example
        final IvParameterSpec iv = new IvParameterSpec(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, …
Run Code Online (Sandbox Code Playgroud)

java encryption bouncycastle aes

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