我正在配置新的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) 我正在使用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
?
我对这个图书馆很新,一般都是ORM.我知道像EntityFramework这样的工具可以从数据库生成代码.ODB for C++能做到这一点吗?
如何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) 我知道内联关键字的意思是避免调用功能的调用开销。但是我不知道扩展属性可以用于什么内联?
假设我们有两个名为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中的等效行为,或对此的一些用法吗?
编辑
给定编译器将替换内联属性的内容,可以方便地内联每个没有繁重操作的扩展属性。
谢谢
我收到以下错误:
错误:(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
,然后在两个字段中注入字符串.我认为问题在于限定符.
任何帮助都非常感谢. …
我已经从 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)