小编crg*_*dos的帖子

Dagger 2:@ Component.Builder缺少所需模块或组件的setter:[appi.example.com.dagger.AppModule]`

我正在配置新的Dagger Android模块但我收到此错误这是我的组件:

@AppScope
@Component(modules = {AppModule.class, NetModule.class})
public interface AppComponent {

  @Component.Builder
  interface Builder {
    @BindsInstance
    Builder application(ExampleApplication application);

    @BindsInstance
    Builder appModule(AppModule appModule);

    @BindsInstance
    Builder netModule(NetModule netModule);

    AppComponent build();
  }

  void inject(ExampleApplication __); 
...
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中构建了这样的内容

appComponent = DaggerAppComponent
      .builder()
      .application(this)
      .appModule(new AppModule(this))
      .netModule(new NetModule())
      .build()
      .inject(this);
Run Code Online (Sandbox Code Playgroud)

但我仍然收到错误

错误:(20,3)错误:@ Component.Builder缺少所需模块或组件的setter:[app.example.com.dagger.AppModule]

根据应该是正确的文件,我错过了什么?

例如,这可能是一个带有Builder的有效组件:

@Component(modules = {BackendModule.class, FrontendModule.class})
interface MyComponent {
  MyWidget myWidget();

  @Component.Builder
  interface Builder {
    MyComponent build();
    Builder backendModule(BackendModule bm);
    Builder frontendModule(FrontendModule fm);
  }
}
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger-2

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

@gradlew +匕首生成注释

我正在使用gradlew(4.10.2)+ dagger(2.18)遇到一个奇怪的问题。

问题是当我打电话时:

./gradlew :app:compileDebugAndroidTestKotlin 
Run Code Online (Sandbox Code Playgroud)

构建失败并显示:

任务:Common:compileDebugJavaWithJavac FAILED

/CommonModule_ProvidesGsonFactory.java:6:错误:包javax.annotation.processing不存在,请导入javax.annotation.processing。产生 ;

/CommonModule_ProvidesGsonFactory.java:8:错误:找不到符号@ 生成的

但是,如果我从Android Studio运行任务,则该任务成功,并且在匕首生成的类中@Generated 存在。

您是否有一些避免使用@Generated注释的线索./gradlew

java gradle kotlin dagger gradlew

9
推荐指数
3
解决办法
1238
查看次数

ORM ODB for C++可以从数据库生成代码

我对这个图书馆很新,一般都是ORM.我知道像EntityFramework这样的工具可以从数据库生成代码.ODB for C++能做到这一点吗?

c++ orm odb

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

如何从 ImageSpan 内的 xml 矢量设置 Drawable

如何Drawable从 xml 向量中设置ImageSpan?我使用下面这两种方法。但我的图标没有显示。当我使用可绘制资源图标中的 png 时,会显示出来。任何想法?

private void setupEmptyListInfoBox() {
        Drawable icon = loadVectorFromResources(getActivity(), R.drawable.ic_add_circle_24dp);
        ImageSpan is = new ImageSpan(icon, DynamicDrawableSpan.ALIGN_BASELINE);
        String info = getString(R.string.empty_weight_list_info);
        int iconPosition = info.indexOf("|");

        SpannableString text = new SpannableString(info);
        text.setSpan(is, iconPosition, iconPosition + 1, 0);

        mEmptyListInfo.setText(text);
    }

public static Drawable loadVectorFromResources(Context context, int resId) {
    Drawable drawable;
    if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        drawable = VectorDrawableCompat.create(context.getResources(), resId, context.getTheme());
    } else {
        drawable = context.getResources().getDrawable(resId, context.getTheme());
    }
    return drawable;
}
Run Code Online (Sandbox Code Playgroud)

android drawable android-drawable android-vectordrawable

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

Kotlin内联扩展属性

我知道内联关键字的意思是避免调用功能的调用开销。但是我不知道扩展属性可以用于什么内联?

假设我们有两个名为foo的扩展属性,另一个带有名为bar的内联属性

val Any.foo : Long
    get() = Date().time

inline val Any.bar : Long
    get() = Date().time
Run Code Online (Sandbox Code Playgroud)

执行其中的任何一个,我们将期望的输出,即当前时间。

该文件的字节码如下:

val Any.foo : Long
    get() = Date().time

inline val Any.bar : Long
    get() = Date().time
Run Code Online (Sandbox Code Playgroud)

我们可以看到两者相似,但仅在以下几行不同:

foo提取:

    LOCALVARIABLE $receiver Ljava/lang/Object; L0 L2 0
    MAXSTACK = 2
    MAXLOCALS = 1
Run Code Online (Sandbox Code Playgroud)

酒吧摘录:

    LOCALVARIABLE $receiver Ljava/lang/Object; L0 L2 0
    LOCALVARIABLE $i$f$getBar I L0 L2 1
    MAXSTACK = 2
    MAXLOCALS = 2
Run Code Online (Sandbox Code Playgroud)

我真的不明白这里发生了什么。有人可以指点我看一下它的行为,或java中的等效行为,或对此的一些用法吗?

编辑

给定编译器将替换内联属性的内容,可以方便地内联每个没有繁重操作的扩展属性。

谢谢

inline kotlin kotlin-extension jvm-bytecode

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

Kotlin + Dagger2:没有@Inject构造函数或@ Provide-或@ Produces-annotated方法不能提供

我收到以下错误:

错误:(8,1)错误:如果没有@Inject构造函数或@ Provide-或@ Produces-annotated方法,则无法提供java.lang.String.

我试图制作一个提供两个合格字符串的模块.这是匕首的简化设置.

@Singleton
@Component(modules = [GreetingsModule::class])
interface AppComponent {
    fun inject(activity: MainActivity)
}

@Qualifier annotation class Spanish
@Qualifier annotation class French
@Qualifier annotation class English

@Module
@Singleton
class GreetingsModule {

    @Provides
    @Spanish
    fun providesHola(): String = "Hola mundo! - From Dagger"

    @Provides
    @English
    fun providesHello(): String = "Hello world! - From Dagger"

}
Run Code Online (Sandbox Code Playgroud)

注入在MainActivity中完成:

class MainActivity : AppCompatActivity() {

    @Inject @Spanish
    lateinit var holaMundoText: String

    @Inject @English
    lateinit var helloWorldText: String

}
Run Code Online (Sandbox Code Playgroud)

我也尝试直接在组件中声明getter,但它失败并出现相同的错误.将模块方法声明为静态时也一样.

正如应该的那样,只有一个代码可以正常工作@Provide,然后在两个字段中注入字符串.我认为问题在于限定符.

任何帮助都非常感谢. …

android qualifiers kotlin dagger-2

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

okHttp3 java.lang.NoSuchMethodError: 没有虚拟方法 setCallWebSocket

我已经从 okhttp + retrofit 更新到 okhttp3 + retrofit2 但我的应用程序没有启动这个异常的原因

FATAL EXCEPTION: EventThread
Process: appli.speaky.com, PID: 14705
java.lang.NoSuchMethodError: No virtual method setCallWebSocket(Lokhttp3/Call;)V in class Lokhttp3/internal/Internal; or its super classes (declaration of 'okhttp3.internal.Internal' appears in /data/data/appli.example.com/files/instant-run/dex/slice-okhttp-3.6.0_29bb10e5f590229716bfa8daf196d09ea67f56a8-classes.dex)
    at okhttp3.ws.WebSocketCall.enqueue(WebSocketCall.java:108)
    at io.socket.engineio.client.transports.WebSocket.doOpen(WebSocket.java:84)
    at io.socket.engineio.client.Transport$1.run(Transport.java:82)
    at io.socket.thread.EventThread.exec(EventThread.java:55)
    at io.socket.engineio.client.Transport.open(Transport.java:77)
    at io.socket.engineio.client.Socket.probe(Socket.java:472)
    at io.socket.engineio.client.Socket.onOpen(Socket.java:485)
    at io.socket.engineio.client.Socket.onHandshake(Socket.java:526)
    at io.socket.engineio.client.Socket.onPacket(Socket.java:499)
    at io.socket.engineio.client.Socket.access$1000(Socket.java:31)
    at io.socket.engineio.client.Socket$5.call(Socket.java:313)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.engineio.client.Transport.onPacket(Transport.java:134)
    at io.socket.engineio.client.transports.Polling.access$700(Polling.java:17)
    at io.socket.engineio.client.transports.Polling$2.call(Polling.java:124)
    at io.socket.engineio.parser.Parser.decodePayload(Parser.java:251)
    at io.socket.engineio.client.transports.Polling._onData(Polling.java:134)
    at io.socket.engineio.client.transports.Polling.onData(Polling.java:106)
    at io.socket.engineio.client.transports.PollingXHR$5$1.run(PollingXHR.java:111)
    at io.socket.thread.EventThread$2.run(EventThread.java:80)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)
Run Code Online (Sandbox Code Playgroud)

android okhttp

5
推荐指数
2
解决办法
6854
查看次数