Kotlin类NoClassDefFoundError崩溃

我有一个现有的Android项目,使用以下库: AutoValue Dagger2 RxJava Retrolambda 我正在尝试添加Kotlin支持,以便我可以将项目慢慢迁移到Kotlin。 这是我所做的。 增加了Kotlin依赖。 将其中一个类转换为Kt类并移至src/main/kotlin/..package.. 源集中添加了kotlin。 sourceSets {main.java.srcDirs + =’src / main / kotlin’} 当我做一个干净的生成和部署应用程序,我得到NoClassDefFoundErrorexception。 但是,如果我再次部署它工作得很好。 有什么建议么? 我在课堂上没有任何注释,所以我没有申请kapt插件。 注意:我正在使用最新的kotlin 1.0.4。 我也有即时运行禁用。

为什么SomeClass :: class是KClass ,但是这个:: class是KClass

我想打印我的类的属性的值。 fun print() { val cl = this::class cl.declaredMemberProperties.filter {it.visibility != KVisibility.PRIVATE}.forEach { println(“${it.name} = ${it.get(this)}”) } } 当我尝试构建此代码时,出现编译器错误: Error:(34, 40) Kotlin: Out-projected type ‘KProperty1’ prohibits the use of ‘public abstract fun get(receiver: T): R defined in kotlin.reflect.KProperty1’ 当我改变this类名SomeClass一切都很好 fun print() { val cl = SomeClass::class cl.declaredMemberProperties.filter {it.visibility != KVisibility.PRIVATE}.forEach { println(“${it.name} = ${it.get(this)}”) } […]

操作条向上导航与片段

我有一个带有三个选项卡的选项卡式的Actionbar / viewpager布局, 如A , B和C. 在选项卡C选项卡(片段),我添加另一个片段说片段D。 同 DFragment f= new DFragment(); ft.add(android.R.id.content, f, “”); ft.remove(CFragment.this); ft.addToBackStack(null); ft.commit(); 我修改DFragment的onResume中的操作栏添加按钮: ActionBar ab = getActivity().getActionBar(); ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); ab.setDisplayHomeAsUpEnabled(true); ab.setDisplayShowHomeEnabled(true); 现在在DFragment中,当我按下硬件(手机)“后退”按钮时,我将选择CFragment返回到原始选项卡式(ABC)布局。 如何使用操作栏向上按钮来实现此function?

在Java中调用Kotlin时如何省略构造函数参数的默认值?

我的kotlin文件: class Chat(var name: String, var age: Int? = 18) 我的Java文件只能做到这一点: new Chat(“John”,18); 但是我能写这个吗? new Chat(“John”);

Kotlin,Proguard和lambda

我有一个整洁的function,在视图上做一些事情: fun Activity.withView(nr : Int, fn : T.()->Unit) { (findViewById(nr) as T?)?.fn() } 现在,当我在我的活动中使用这个函数时: withView(R.id.spinner_toolbar) { adapter = AdapterIndeksuDlaSpinnera(this@NewMainActivity, PlaylistIndex) …一切正常,直到我使用ProGuard。 我可以看到AdapterIndeksuDlaSpinnera正如预期的AdapterIndeksuDlaSpinnera受到了损坏,但是当程序用“无法加载类AdapterIndeksuDlaSpinnera”(同时它应该抱怨损坏的适配器名称)进行编程时失败。 我能够通过禁用所有可以在我的withView使用的适配器来创建速度解决方法 -keep class pl.qus.xenoamp.adapter.** { *; } 但我不觉得这是一个好的解决方案(我不知道其他类可以以这种方式失败!)。 所以任何人都可以解释什么是问题,我应该添加什么样的ProGuard行来解决在withView使用的其他类的类似withView ?

用密封类强制编译错误

对于密封类,当expression式返回结果时,可以使用穷举expression式并省略else子句: sealed class SealedClass { class First : SealedClass() class Second : SealedClass() } fun test(sealedClass: SealedClass) : String = when (sealedClass) { is SealedClass.First -> “First” is SealedClass.Second -> “Second” } 现在,如果我要添加Third到SealedClass ,编译器会抱怨test()中的whenexpression式不完全,我需要为Third或else添加一个子句。 我想知道,但是如果这个检查也可以强制执行test()不返回任何东西时: fun test(sealedClass: SealedClass) { when (sealedClass) { is SealedClass.First -> doSomething() is SealedClass.Second -> doSomethingElse() } } 如果添加Third这个片段不会中断。 我可以在时间之前添加一个return语句,但如果其中一个子句的返回types不是Unit ,则可能很容易被遗忘,并可能中断。 […]

消息没有收到蓝牙聊天。 我的处理程序是否坏了

我正在开发Android开发项目。 蓝牙的网站,它似乎是正确的发送消息,但没有收到他们。 过去,我试图创建另一个蓝牙应用程序,当连接到设备时,系统提示我确认连接,并显示PIN码。 在当前的应用程序工作时,我从来没有得到提示。 但是,它并没有出现任何exception情况,并且消息似乎正在发送。 这是我的Thread类用于管理连接: inner class ConnectedThread(val socket:BluetoothSocket, val socketType:String) : Thread(){ val inStream = socket.inputStream val outStream = socket.outputStream init { mState = STATE_CONNECTED } override fun run() { Log.i(TAG, “BEGIN mConnectedThread”) val buffer = ByteArray(1024) var bytes:Int while (mState == STATE_CONNECTED){ try { bytes = inStream.read(buffer) mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer) .sendToTarget() […]

FirebaseListAdapter忽略orderByChild()和equalTo()

所以,我想让FirebaseListAdapter显示自动填充建议,因为在用户输入至少X(在我的情况下,1)字符。 val mSearchSuggestionsListView = findViewById(R.id.main_list_view) as ListView var suggestionAdapter: FirebaseSuggestionAdapter? = null mSearchEditText.editText.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(editable: Editable) { if (editable.length > 1) { … createNewSuggestionAutoComplete(editable.toString().toLowerCase()) … } else { mSearchSuggestionsListView.adapter = null } } … //Other overrides trimmed }) fun createNewSuggestionAutoComplete(query: String) { val ref = FirebaseDatabase.getInstance().getReference(“myModels”) .orderByChild(“name”).equalTo(query).ref suggestionAdapter = FirebaseSuggestionAdapter(ref) … […]

将FlexBox子元素添加到FlexBox后,如何更改其宽度

我们有一个按钮和一个视图(将按钮与其他视图分开的一行)的线性布局。 我们将linearLayout以编程方式添加到flexBox元素,并将Flex上的FlexGrow设置为1f。 问题是,我不能让内部按钮匹配父线性布局的宽度,同时设置最小宽度。 当我将按钮的宽度(xml)设置为match_parent时,父元素的大小只有按钮中的文本的大小(在文本更改的情况下,它的大小要大20%左右)。 在这个例子中,setMinnimumWidth()似乎没有任何影响。 但是,当我将按钮宽度(在xml中)设置为WrapContent然后setMinimumWidth()确实工作。 该按钮显示为正确的大小,但父元素比按钮大得多(大概是为了填充flexBox行中的剩余空间。 我怎样才能让按钮和它的父母是同样的大小,同时也能够设置最小宽度? xml为我们添加的flexbox元素, 添加元素并设置宽度的代码 val button = linearLayout.findViewById(R.id.button_id) as Button button.width = width button.minimumWidth = width flexBox.addView(linearLayout) val layoutParams = linearLayout.layoutParams layoutParams.width = width linearLayout.layoutParams = layoutParams linearLayout.invalidate() linearLayout.requestLayout() 代码在kotlin。

将kotlin转换为java后,Notnullvariables可以为空

当我有一个这样的kotlin类时,假设uniqueName是NotNull。 data class Payload( @SerializedName(“unique_name”) val uniqueName: String, @SerializedName(“nbf”) val nbf: Int, @SerializedName(“exp”) val exp: Int, @SerializedName(“iat”) val iat: Int ) 但是当我测试这个代码 @Test fun fromStringJsonToObject4() { val gsonHelper = GsonHelper() val payloadJsonString = “{}” val payload = Payload(“”, 0, 0, 0) assertEquals(gsonHelper.fromStringJsonToObject(payloadJsonString, Payload::class.java), payload) } 它返回 Expected :Payload(uniqueName=null, nbf=0, exp=0, iat=0) Actual :Payload(uniqueName=, nbf=0, exp=0, […]