小编Pac*_*co1的帖子

Dagger 2 Android 应用程序组件缺少注入方法

我尝试了一个带有 dagger.android 包的新发布的 Dagger 2.10 的小型 Android 项目。只有这个MainApplication类应该被 Dagger 注入,其他任何东西都没有任何依赖:

构建.gradle

dependencies {
  ...
  // Dagger
  compile 'com.google.dagger:dagger:2.10'
  compile 'com.google.dagger:dagger-android:2.10'
  annotationProcessor 'com.google.dagger:dagger-compiler:2.10'

  // Fix for incompatible library versions when adding dagger-android and having espresso-core:2.2.2 in tests
  androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'
}
Run Code Online (Sandbox Code Playgroud)

主应用程序

public class MainApplication extends Application implements HasDispatchingActivityInjector {

  @Inject DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;

  @Override
  public void onCreate() {
      super.onCreate();
      DaggerMainApplicationComponent.create();
   // DaggerMainApplicationComponent.create().inject(this); does not work - no inject(...) method!
  }

  @Override
  public DispatchingAndroidInjector<Activity> activityInjector() {
      return dispatchingAndroidInjector;
  }
}
Run Code Online (Sandbox Code Playgroud)

主应用组件.java …

android dagger dagger-2

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

如何在Swift 3中使用NSSecureCoding解码字符串?

我目前正在尝试iOS 10 Beta并决定将我的Swift代码转换为Swift 3.到现在为止,我能够安全地解码一个String

coder.decodeObjectOfClass(NSString.self, forKey: CoderKeys.code) as! String
Run Code Online (Sandbox Code Playgroud)

转换到Swift 3后,Xcode给了我以下错误:

'decodeObjectOfClass(_:forKey:)' is unavailable in Swift: use generic 'decodeObjectClass(_:forKey:)'
Run Code Online (Sandbox Code Playgroud)

正如我所提到的,我正在使用NSSecureCoding,所以很遗憾decodeObject(forKey: String)不会这样做.这是测试版错误吗?我错过了什么?

xcode ios nssecurecoding swift3

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

如何使用Dagger 2 BindsOptionalOf

我正在使用Dagger 2构建一个Android应用程序,如果可用的话,它支持蓝牙.我想用Dagger注入BluetoothAdapter依赖项.

我知道null使用Dagger 注入值的一种方法,即注释模块中的Provider方法,Component中的依赖项声明和注入站点的参数@Nullable.但是为了更清楚地说明BluetoothAdapter是一个可选的依赖项(应用程序的其余部分也可以在没有BT的情况下工作,并且也应该在模拟器上工作),我想要声明依赖关系,Optional<BluetoothAdapter>官方文档中所述.

我的模块中有一个Provider方法:

@Provides
static BluetoothAdapter providesBluetoothAdapter(MainApplication application) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

以及组件中的相应声明:

BluetoothAdapter bluetoothAdapter();
Run Code Online (Sandbox Code Playgroud)

根据说明,我将注入站点更改为Optional<BluetoothAdapter>,使我的模块抽象化并在模块中添加以下抽象方法:

@BindsOptionalOf abstract BluetoothAdapter optionalBluetoothAdapter();
Run Code Online (Sandbox Code Playgroud)

但是,java.lang.NullPointerException: Cannot return null from a non-@Nullable @Provides method在模拟器上运行时,它仍会失败并出现异常.那时我想,也许我误解了目的,@BindsOptionalOfBluetoothAdapter bluetoothAdapter();从我的组件中删除了声明,看它是否取决于是否在组件中声明了依赖项.仍然无法正常工作.

我错过了什么?是否可以通过可选绑定完成我想要做的事情,因为注释的方法@BindsOptionalOf必须是抽象的?

android dagger-2

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

macOS 上的 SourceTree 不断询问 SSH 密钥密码,或者如果密码存储在钥匙串中则挂起

多年来,我一直很高兴在 Mac 上使用 SourceTree,很少遇到问题。几周前更新 macOS 后,它突然完全停止工作。每当我尝试对我的任何Git 存储库进行克隆/获取/推/拉/任何操作时,SourceTree 要么

  1. 在我输入后立即一遍又一遍地要求我的 SSH 密钥密码(如果我没有将它保存在钥匙串中),或者
  2. 如果密码存储在钥匙串中,则只会永远挂在进度窗口中。

这不是存储库的问题。Github 也发生了这种情况,使用与之前完全相同的存储库和设置。密钥有chmod 400,和以前一样,它是默认密钥~/.ssh/id_rsa。尝试在 SourceTree 和 System Git 中使用嵌入式 Git,但无济于事。我在此期间切换到的另一个应用程序正常工作。

我不记得究竟是哪个 macOS 更新导致了这些问题,但我现在使用的是最新的 macOS Catalina 10.15.4 和 SourceTree 4.0.1。由于另一个问题,我将磁盘彻底擦干净并从头开始重新安装了所有内容,但仍然无法正常工作。我找不到任何关于阻止 SourceTree 访问密钥本身的新访问限制,或者在这种情况下我如何允许访问。这让我发疯了,在此期间我已经切换到另一个应用程序,但如果允许的话,我真的很想继续使用 SourceTree。

编辑:当我在 macOS 上使用 SourceTree 时,我的所有存储库都受到此问题的影响。所有存储库也被其他人使用,当我使用另一个应用程序时,它也适用于我的 Mac。即使是我另一台笔记本电脑上的 SourceTree for Windows,所有这些都使用相同的键。

git macos atlassian-sourcetree

3
推荐指数
2
解决办法
2306
查看次数