Tag: 安卓

Kotlin + Dagger注入问题取决于设备的Android版本/ SDK(?)

上周,在我现在的Kotlin MVP项目中实施Dagger的时候,我正在使用KitKat 4.4.2在老式手机上进行测试(因为主要手机的维护,它仍然支持所有主要的function和东西)。 所以那一周我遇到了一些典型的问题,而不是一些不寻常的事情,通过调查提供的错误,或多或少地快速解决问题 终于,代码编译,当前的项目版本建成没有问题,没有运行与UI交互KitKat的重大错误。 但是,当我从维修中心拿走了带有Nougat 7.1.2的主电话并启动了应用程序时,我陷入了奇怪的DI相关问题。 之后,我也在mate的Marshmallow 6.0上推出了应用程序,并且又抓了一个,完全一样。 这个问题简单描述如下: 应用程序(成功)启动; 我能够操作通过上下文和fragmentManager注入提供的ViewPager / DrawerLayout / etc uifunction; 所有的服务也可以按照预期的方式进行注射。 当我抽动Activity的Presenter时,应用程序崩溃。 而现在最有趣的部分,这让我疯狂:所有可访问的类,不带来任何问题,通过构造注入注入。 但是,使用字段注入注入的Presenter实例在需要时不会被初始化 。 当然,我试图不使用lateinit修饰符,并注入它像@JvmField可空字段或没有它:结果是相同的 – 它根本不被注入。 由于问题与Activity有关,我有“自然约束”不使用主要构造函数注入。 这是一个例外情况,除了第一个字符串外,对我来说不是很有帮助。 kotlin.UninitializedPropertyAccessException: lateinit property presenter has not been initialized at .ui.common.view.BaseViewActivity.getPresenter(BaseViewActivity.kt:14) at .ui.main.view.MainActivity.onPlaceTypeClick(MainActivity.kt:143) at .ui.types.nearby.view.NearbyPlaceTypeItemViewHolder$bind$1.onClick(NearbyPlaceTypeItemViewHolder.kt:32) at android.view.View.performClick(View.java:5647) at android.view.View$PerformClick.run(View.java:22462) at android.os.Handler.handleCallback(Handler.java:754) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:163) at android.app.ActivityThread.main(ActivityThread.java:6205) at java.lang.reflect.Method.invoke(Native […]

Kotlin和Android数据绑定(BuildTools 2.0.0)

在我的Android项目中,我正在使用Kotlin和Android数据绑定。 它工作得很好,但现在我想更新Android Gradle插件到版本2.0.0-beta5。 在构建项目时,出现以下错误: 例外是在这里 java.lang.RuntimeException: failure, see logs for details. cannot generate view binders java.lang.NoSuchMethodError: kotlin.text.StringsKt.split$default(Ljava/lang/CharSequence;[Ljava/lang/String;ZII)Ljava/util/List; at android.databinding.tool.ext.ExtKt.androidId(ext.kt:76) at android.databinding.tool.writer.LayoutBinderWriterKt$readableName$2.invoke(LayoutBinderWriter.kt:99) at android.databinding.tool.writer.LayoutBinderWriterKt$readableName$2.invoke(LayoutBinderWriter.kt) at android.databinding.tool.ext.LazyExt.getValue(ext.kt:27) at android.databinding.tool.writer.LayoutBinderWriterKt.getReadableName(LayoutBinderWriter.kt) at android.databinding.tool.LayoutBinder.(LayoutBinder.java:202) at android.databinding.tool.DataBinder.(DataBinder.java:49) at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:81) at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:130) at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:149) at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82) at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154) at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139) at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66) at org.jetbrains.kotlin.annotation.AnnotationProcessorWrapper.process(AnnotationProcessorWrapper.kt:136) at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793) at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722) at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029) […]

Kotlin:如何将数据从RecyclerView适配器发送到片段

我是新来的Android和新的Kotlin(来自iOS Swift开发)。 我有一个活动,有一个片段,里面的片段是一个RecyclerView。 当用户点击RecyclerView中的一行时,我想显示一个对话框并采取一些行动。 在适配器中,我有CustomViewHolder和onClickListener。 从那里,我可以捕捉用户轻松点击的行。 但是,如何将这些信息传递回片段,以便我可以采取行动/显示一个对话框? 谢谢!

与Kotlin一起使用Instant Run时发生IllegalAccessError

使用“即时运行”运行项目后,我得到了这个exception: java.lang.IllegalAccessError:非法类访问:’com.alla.kotlinexample.MainActivity $覆盖’试图访问’kotlin.jvm.internal.DefaultConstructorMarker’(声明’com.alla.kotlinexample.MainActivity $覆盖’出现在/数据/数据/ com.alla.kotlinexample /文件/即时运行/ DEX-温度/ reload0x0000.dex) 在 com.alla.kotlinexample.MainActivity $ override.onCreate(MainActivity.kt:21) 在 com.alla.kotlinexample.MainActivity $ override.access $ dispatch(MainActivity.kt) 这里是代码: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(toolbar) val persons: List = listOf(Person(“Person1”), Person(“Person2”, 27)) fab.setOnClickListener { view -> Snackbar.make(view, persons[1].name, Snackbar.LENGTH_LONG) .setAction(“Action”, null).show() } tv_person_name.text = persons.maxBy { it.age ?: […]

使用Kotlin Anko拍摄照片并显示结果的最佳方法是什么?

我正在和Anko一起玩Kotlin,并试图用它拍摄一张照片,然后在我的测试应用程序中使用下面的Android培训文档作为起点显示结果图像。 http://developer.android.com/training/camera/photobasics.html 使用Anko实现这个function的最好方法是什么? 我试图使用startActivityForResult函数,但我没有任何运气搞清楚如何将图像视图添加到可以使用onActivityResult的结果更新的布局。

如何使用Kotlin精简构造函数语法来使用Room库的@Ignore注解?

我试图使用android室库和Kotlin的紧凑语法指定一个构造函数与默认参数值。 像这样的东西: @Entity class MyEntity(var myString:String = “non-trivial string”) { @PrimaryKey(autoGenerate = true) var myIndex:Int = 0 } 但是我得到这个警告信息: 有多个好的构造函数,Room会选择无参数的构造函数。 您可以使用@Ignore注释来消除不需要的构造函数。 语法允许在这个紧凑的Kotlin风格的构造函数中写入Room的@Ignore注释吗? 我知道我可以做这样的事情来消除这个警告信息,但是它更冗长。 这也使得构造函数arg的默认值显得冗余/无益: @Entity class MyEntity() { @Ignore constructor(myString:String = “non-trivial string”) : this() { this.myString = myString } @PrimaryKey(autoGenerate = true) var myIndex:Int = 0 var myString:String? = null } 我怎样才能宣布一个房间的实体,但仍利用Kotlin的简洁性? 非常感谢你。

在Kotlin的RecyclerView适配器的内部类中访问外部类的成员的最佳方法是什么?

我在我的Android应用程序中创建了我的第一个Kotlin类。 通常,为了记录目的,我有一个名字TAG的常量。 我在我的RecyclerView适配器中将其定义为: class MyAdapter(private val dataList: ArrayList): RecyclerView.Adapter() { private val TAG: String? = MyAdapter::class.simpleName . . . class ViewHolder(v: View) : RecyclerView.ViewHolder(v), View.OnClickListener { fun bindData(){ //some statements } override fun onClick(p0: View?) { //I want to use the above defined TAG here as I would do in Java: // Log.d(TAG, “”); } […]

如何获取Android Studio中的用户输入数值并将其转换为kotlin中的variablesint?

大家好,我正在尝试在Android Studio中制作计算器,因为我是新的Kotlin和Java,所以对我来说很困难。 这里是我的mainActivity xml文件的源代码: 这里是我的Android mainActivity.kt文件 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) okactivity2.setOnClickListener{ val num1 = editText1.text val user1: Int = num1 val num2 = editText2.text val user2: Int = num2 val sum = user1 + user2 editText3.setText(“Answer is $sum”) } } 在这里,我无法将字符串editText1和editText2转换为int,所以我可以设置ediText3作为答案

android kotlin中的多个AdListener

我正在制作一个应用程序,供个人使用,在单个活动上有多个横幅广告。 我想听所有的广告onAdLoaded()事件。 为此,我必须为每个广告添加AdListener 。 如果我有十个广告,我必须写十次相同的代码吗? 所以,我的问题是,有没有什么办法来减少像onClickListener这样的多个按钮这样的代码? 我已经尝试以按钮的onClickListener相同的方式做到这一点,但它不起作用。 我的代码的一部分: ad1.adListener = object : AdListener() { override fun onAdLoaded() { super.onAdLoaded() incrementCounter() } } ad2.adListener = object : AdListener() { override fun onAdLoaded() { super.onAdLoaded() incrementCounter() } } ad3.adListener = object : AdListener() { override fun onAdLoaded() { super.onAdLoaded() incrementCounter() } } 我必须为所有广告单元重复相同的代码。这使我的代码笨重,这是我的问题。

反序列化kotlin数据类android

我有简单的课程 data class UserInfo(val id:String, val name:String, val email:String) : Serializable { } 我将它序列化为字符串 (userInfo as Serializable).toString() 我怎样才能反序列化它?