对于最近版本的匕首2,所做的改进之一是具有静态提供方法的可能性.简单地说:
@Provides
static A providesA() {
return A();
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何在kotlin做这件事?我试过了
@Module
class AModule {
companion object {
@JvmStatic
@Provides
fun providesA(): A = A()
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
@Provides methods can only be present within a @Module or @ProducerModule
Run Code Online (Sandbox Code Playgroud)
我猜这里有同伴对象,但是我对Kotlin很新,我不确定如何做到这一点.它甚至可能吗?
谢谢!
我正在从Rx 1迁移到Rx 2,突然在阅读帖子时我发现Single应该是用于改装调用的可观察类型.
所以我决定尝试一下,在将我们的改装调用迁移到Rx 2时,我也将返回值更改为Single<whatever>.
现在的问题是,我们的一些测试模拟网络服务类似于:
when(userService.logout()).thenReturn(Observable.empty())
Run Code Online (Sandbox Code Playgroud)
正如您在迁移调用之前所看到的那样,我们过去只是通过告诉userServicemock返回一个空的observable 来完成流.
在迁移到Single调用的"版本"时,我们不再使用,Observable.empty()因为调用不返回Observable,但返回a Single.
我最终做了类似的事情:
when(userService.logout()).thenReturn(
Single.fromObservable(Observable.<whatever>empty()))
Run Code Online (Sandbox Code Playgroud)
我的问题是:
我一直在尝试使用 compose 实现以下布局:
为此,我创建了可组合的:
@Preview(showBackground = true)
@Composable
fun element() {
ConstraintLayout(
modifier = Modifier.fillMaxWidth()
) {
val (checkbox, title, icon) = createRefs()
Text(
text = "This would be some text",
style = TextStyle(
color = Color.Black,
fontSize = 18.sp,
),
modifier = Modifier.constrainAs(title) {
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
start.linkTo(checkbox.end)
end.linkTo(icon.start)
},
)
Checkbox(
checked = false,
modifier = Modifier.constrainAs(checkbox) {
top.linkTo(title.top)
bottom.linkTo(title.bottom)
start.linkTo(parent.start)
},
onCheckedChange = {},
)
Icon(
asset = Icons.Filled.Close,
modifier = Modifier
.constrainAs(icon) {
top.linkTo(title.top)
bottom.linkTo(title.bottom)
end.linkTo(parent.end)
} …Run Code Online (Sandbox Code Playgroud) 我已经使用git了很多但是远离了子模块,因为我没有充分的理由使用它们.但是,最近我开始了一个明显需要使用git这个功能的项目.
但是,每次克隆整个项目时,子模块都会以没有名称的分支结束.以下是我执行的命令:
git clone <url to project>
git submodule update --init <submodule>
cd <submodule>; git branch
Run Code Online (Sandbox Code Playgroud)
它打印出来:
* (no branch)
master
Run Code Online (Sandbox Code Playgroud)
我需要做一些额外的事情
git checkout master
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:这是标准行为吗?如果没有,你能帮助我理解我做错了什么吗?
谢谢
简单地说,在webview中加载内容并点击文本字段后,我的应用程序拒绝调整大小或平移.
这是我的设置
我有一个包含多个片段的Activity.这是片段容器的布局.
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- MAIN CONTENT -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" />
<RelativeLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start">
<!-- ... -->
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
这是webview片段的布局.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/tbOnlinePayment"
layout="@layout/toolbar" />
<WebView
android:layout_below="@+id/tbOnlinePayment"
android:id="@+id/paymentWebView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar
android:id="@android:id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我的应用程序的主题延伸 Theme.AppCompat.Light.DarkActionBar
我尝试过的:
android:windowSoftInputMode="adjustResize"和android:windowSoftInputMode="adjustPan".android:windowSoftInputMode="adjustResize"无法使用,但我不会手动强制执行此操作.我在这里放置应用程序的主题,因为也许有人知道这个主题以某种方式强制全屏.<item name="android:windowFullscreen">false</item>到应用程序的主题,但仍然没有结果.webview在一个scrollview.webview高度改为wrap_content.我想要的:
我不关心webview是调整大小还是推高.我想要的是键盘不隐藏输入字段.
我一直在研究一个使用rabbitmq进行交流的项目.最近我们发现,如果我们使用兔子路由功能,它将具有很大的可扩展性.所以基本上我们将队列绑定到几个路由键并使用类型的交换direct.
它像发布/订阅一样工作.因此,可以将队列绑定和解除绑定到不同的事件,以便消费者/订阅者只接收他们感兴趣的消息.
当然,生产者/发布者现在使用绑定密钥(事件名称)将routing_key其传递给pika实现.但是,当它为不存在的绑定发布某些内容时,该消息将丢失,即当没有人绑定事件队列foo但是某些发布者调用时pika.basic_publish(..., routing_key='foo').
所以我的问题是:
是否可以知道消息是否实际发布在队列中?
我尝试过的:
检查pika.basic_publish的返回值.它总是回归None.
当我们尝试发布不存在的绑定时,请检查是否存在异常.空无一人.
有一个额外的队列来进行带外控制(因为所有订户都由同一个进程运行).这种方法就像用火箭筒杀死苍蝇一样,我拒绝保留它.而且,我认为我应该为了实际尝试而拍摄自己.
附加信息
由于我正在使用此路由功能,因此队列名称由rabbit生成.如果新方法必须命名队列本身,我没有任何问题.
如果建议一种新的方法需要绑定到交换而不是队列,我想听听它们,但我宁愿避免使用它们,因为它们实际上不是AMQP,而是由rabbitmq实现的扩展.
鼠兔版是0.9.5
rabbitmq版本是2.8
非常感谢
我正在实现一些使用可变长度 id 的程序。这些 ID 标识一条消息并发送到将执行某些操作(与问题无关)的代理。但是,代理中此 id 的最大长度为 24 字节。我正在考虑使用 SHA 对 id 进行哈希处理(在发送到代理之前)并删除一些字节,直到它仅获得 24 个字节。
但是,我想知道这会增加多少碰撞。这就是我到现在为止得到的:
我发现对于“完美”哈希,我们有p^2 / 2^n+1描述冲突概率的公式,其中p是消息数量,n是消息大小(以位为单位)。这就是我的问题开始的地方。我假设从最终哈希中删除一些字节该函数仍然保持“完美”,并且我仍然可以使用相同的公式。所以假设我得到:
5160^2 / 2^192 + 1 = 2.12x10^-51
Run Code Online (Sandbox Code Playgroud)
其中 5160 是消息的选择数,192 基本上是 24 字节中的位数。
我的问题:
我的假设正确吗?通过删除一些字节,哈希是否保持“完美”。
如果是这样,并且由于概率非常小,我应该删除哪些字节?最重要还是最不重要?这真的很重要吗?
PS:欢迎任何其他建议来达到相同的结果。谢谢。
在MVP模式中描绘您的演示者订阅返回观察者的服务的情况:
public void gatherData(){
service.doSomeMagic()
.observeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(new TheSubscriber());
}
Run Code Online (Sandbox Code Playgroud)
现在该类从视图中TheSubscriber调用onNext一个方法,例如:
@Override public void onNext(ReturnValue value) {
view.displayWhatever(value);
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的单元测试中,我想验证当在gatherData()非错误情况下调用该方法时,将调用视图的方法displayWhatever(value).
问题:
有干净的方法吗?
背景:
TheSubscriber我试过了什么:
谢谢您的帮助
随着dagger-android一个现在可以简单地写上如下,并成功注入应用程序的依赖关系:
@Module
public abstract class MainActivityModule {
@ContributesAndroidInjector
abstract MainActivity contributesMainActivity();
}
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
AndroidInjectionModule.class,
AppModule.class,
MainActivityModule.class
})
public interface ApplicationComponent {
void inject(BaseApplication baseApplication);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
ApplicationComponent build();
}
}
@Module
public abstract class AppModule {}
public class MainActivity extends AppCompatActivity implements
HasSupportFragmentInjector {
@Inject
DispatchingAndroidInjector<Fragment> dispatchingAndroidInjector;
@Inject
Whatever whatever;
@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public AndroidInjector<Fragment> supportFragmentInjector() {
return dispatchingAndroidInjector;
} …Run Code Online (Sandbox Code Playgroud) 可能重复:
void*算术
嗨伙计们,我有一个关于C中指针增量的小问题.首先我要知道,指针将ptr++在哪里ptr增加sizeof(*ptr).我也知道*ptr,在编写时,编译器知道它必须sizeof(*ptr)从内存中获取字节.
第二部分帮助我理解为什么以下甚至不编译:
int main(){
int a = 3;
void* b = &a;
printf("%d\n", *b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为编译器不知道类型变量的大小void.但是,我对以下代码有点困惑:
int main(){
int a = 3;
void* b = &a;
printf("%p\n", b);
b++;
printf("%p\n", b);
}
Run Code Online (Sandbox Code Playgroud)
所以,我的两个问题是:
编译器如何知道它应该增加b多少?
为什么它只增加一个字节(至少在我的机器中是一个字节)?