Android – 在Kotlin中声明和使用视图

我正在尝试使用android的kotlin,并尝试像这样声明Linearlayout: internal var linlay_SuccessfulPayment : LinearLayout = null!! internal var linlay_failPayment : LinearLayout linlay_SuccessfulPayment = findViewById(R.id.linlay_SuccessfulPayment) as LinearLayout linlay_failPayment = findViewById(R.id.linlay_failPayment) as LinearLayout 但在日志中我得到这个: Caused by: kotlin.KotlinNullPointerException at com.example.activities.PaymentResult.(Result.kt:14) at java.lang.Class.newInstance(Native Method) at android.app.Instrumentation.newActivity(Instrumentation.java:1096) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3122) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415) at android.app.ActivityThread.access$1100(ActivityThread.java:229) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:7329) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) […]

如何以编程方式打开Android棉花糖上的特定应用程序的权限屏幕?

我有一个关于新的Android棉花糖版本的问题: 通过意图或类似的方式显示特定应用程序的权限屏幕是否可行? 可以使用下面的代码显示应用程序设置 – 是否有直接打开权限屏幕的模拟解决方案? startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts(“package”, getPackageName(), null))); 我已经做了一些这方面的研究,但是我找不到一个合适的解决方案 – 我会很感激每一个帮助!

无法转换为org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror

我想升级到匕首2.8 – 但是现在我的项目在编译时会抛出这个错误: :android:compileWithAnalyticsWithCloudProdDebugAndroidTestKotlinAn exception occurred during annotation processing. Stacktrace: java.lang.ClassCastException: org.jetbrains.kotlin.java.model.types.JeMethodExecutableTypeMirror cannot be cast to org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror at org.jetbrains.kotlin.annotation.processing.impl.KotlinTypes.isSubsignature(KotlinTypes.kt:275) at dagger.shaded.auto.common.Overrides$ExplicitOverrides.isSubsignature(Overrides.java:183) at dagger.shaded.auto.common.Overrides$ExplicitOverrides.overrides(Overrides.java:109) at dagger.shaded.auto.common.MoreElements.getLocalAndInheritedMethods(MoreElements.java:334) at dagger.shaded.auto.common.MoreElements.getLocalAndInheritedMethods(MoreElements.java:314) at dagger.internal.codegen.ComponentValidator.validate(ComponentValidator.java:165) at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:123) at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:47) at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:329) at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:182) at org.jetbrains.kotlin.annotation.AbstractAnnotationProcessingExtension.doRound(AnnotationProcessingExtension.kt:346) at org.jetbrains.kotlin.annotation.AbstractAnnotationProcessingExtension.process(AnnotationProcessingExtension.kt:283) at org.jetbrains.kotlin.annotation.AbstractAnnotationProcessingExtension.doAnnotationProcessing(AnnotationProcessingExtension.kt:269) at org.jetbrains.kotlin.annotation.AbstractAnnotationProcessingExtension.analysisCompleted(AnnotationProcessingExtension.kt:140) at org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:119) at org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext(TopDownAnalyzerFacadeForJVM.kt:66) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.analyze(KotlinToJVMBytecodeCompiler.kt:365) at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:126) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:358) […]

扩展函数不会创建新的Observable对象

我有kotlin和rxjava意想不到的行为。 我使用picasso创建了一个用于加载图像的扩展function fun Picasso.loadBitmap(url: String) : Observable = Observable.create { emitter -> Log.d(“picasso load bitmap”, “me ${this}”) try { val bitmap = load(url).centerCrop() .resize(100, 100) .transform(CircleTransformer()) .get() emitter.onNext(bitmap) emitter.onComplete() } catch (e: IOException) { emitter.onError(e) } } 我在这样的时间间隔(几乎在同一时间)多次调用这个, picasso.loadBitmap(place.image_url) .subscribeOn(Schedulers.io()) .retryWhen { error -> error.zipWith(Observable.range(1, 5), BiFunction { t1, t2 -> RetryWrapper(t2.toLong(), t1) }) .flatMap […]

Android数据绑定和Kotlin

我将我的Android应用程序从Java转换为Kotlin。 它工作正常,除了当我尝试转换使用Android数据绑定库的文件。 在这种情况下,Android Studio会在编译时抱怨未解决的引用: Error:(10, 44) Unresolved reference: AdapterHistoriesListBinding 其中AdapterHistoriesListBinding是应该由数据绑定库生成的文件的名称。 它在Java中正常工作,所以我猜这是Kotlin的一个问题。 我正在使用Android Studio 2.0.0-beta6,Android Gradle Plugin 2.0.0-beta6和Kotlin 1.0。 数据绑定库和Kotlin一起工作有什么需要做的吗?

Kotlin中的条件副作用和可选types

我正在努力在Kotlin中执行一个简单的副作用: fun handle(request: Request) { repository.findByUID(request.userId)?.let { if (someCondition) return service.run(…) } } 正如你所看到的那样,当知识库返回一个非空值并且满足someCondition时,应该执行副作用 。 有没有Kotlin这样做的方式,而不是使用如果{} – 返回结构? 在Java 8中,可以通过以下方式来实现: optional .filter(…) .ifPresent(…)

如何让Glide使用Android Studio 3.0?

自升级到Android Studio 3.0以来,我无法识别“AppGlideModule”。 Android Studio无法识别导入 import com.bumptech.glide.module.AppGlideModule; 看这里 我已经尝试更新“编译”到“实施” 。 我也尝试清理和重建项目,以及使缓存/重新启动失效。 build.gradle(module:app) apply plugin: ‘com.android.application’ android { compileSdkVersion 26 defaultConfig { applicationId “com.example.test” minSdkVersion 15 targetSdkVersion 26 buildToolsVersion “26.0.2” versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } } dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) […]

图像存在,不为空,但我得到一个NullPointerExceptionexception

简短的介绍 我目前正在使用的应用程序从JSON中获取图像,如果正确使用它,并将其保存为下次使用的加载图像。 问题 突然之间,应用程序开始崩溃加载和进一步检查,我已经到位的file.isFile && file.canRead()检查返回正面,但它仍然在BitmapFactory.decodeStream崩溃。 该文件的字节数为8k,与其他设备相比,其中相同的图像实际上有43k字节。 图像json是一个更大的json消息(约500kb)的一部分,它不是在开始或结束。 在发生这种情况之前的最后一次使用中,加载或签名没有问题,表明下载可能已经停止了一半。 即使如此,图像仍然有8kb,所以我想应该只是用它的部分创建的东西,而不是抛出NullPointerException 我正在使用Android Studio 3.0 Beta 4,代码位于Kotlin。 我必须在这个设备上运行100次,甚至在发生这种情况之后,它在其他测试设备上运行得非常好,加上在启动时获得完全相同的json的iOS应用程序 我在找什么 关于如何处理这个问题的建议,或者是Android或Kotlin中已知的错误的信息。 我可以重新安装应用程序在设备上,它会再次确定,但不会希望发生这种情况后,应用程序被释放,如果我可以阻止它。 LaterEdit :有了Xaviers的建议,我已经把文件复制到桌面上了,当它加载的时候它肯定是格式不正确的,实际上显示了Mac上运行的东西的一些严重畸形的图像。 我试图上传它,但它只是显示为一个空的白色图像。 它仍然有8kb,所以它包含一些数据。 这怎么可能,可以预防? 码 加载应用程序,我检查图像是否存在,并将其加载到imageView中 try { if (DesignSupport().imageExists(“logo”, this)) { if (DesignSupport().loadImage(“logo”, this) != null) { imageView.setImageBitmap(DesignSupport().loadImage(“logo”, this)) } } } catch (error: Error) { Log.i(tag, error.stackTrace.toString()) } 检查图像是否存在 fun imageExists(string: String, context: […]

在iOS项目中使用Java库

我正在开发一个项目,需要基于相对复杂的规则集进行业务逻辑计算。 卡路里将在以下平台上执行: Android应用 iOS应用 Java EE应用程序容器 业务逻辑不依赖于任何平台的具体细节,而是严格的“数字运算”。 为了避免Java和Objective C的双重实现,需要进行精细的测试等等,我想创建一个包含实现的Java库,并在iOS应用程序中使用它。 什么是最好的方法来做到这一点? 为Objective C做一个本地端口会更好吗? 反过来,最好是用Objective C编写库并在Android / Java上使用它?

在Kotlin中,Jackson数据类的反序列化错误

不确定如何最好地解释这个问题,所以我讽刺了java和kotlin相同的代码来更好的演示。 当我读取JSON时,即使参数甚至不是json的一部分,数据bean默认值是缺少字段的值,但它似乎强制数据bean值为NULL。 在Java中它正常工作,从来没有试图取消从未提供开始的值。 在Kotlin,它似乎打破了,因为它试图取消一个不可空的字段。 在Kotlin data class Pojo(val name: String, val age: Int, val list: List = emptyList(), val ts: Date = Date()) private val mapper: ObjectMapper = ObjectMapper().registerModule(KotlinModule()) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) fun main(args: Array) { mapper.readValue(“””{“name”: “John Doe”, “list”: [“yellow”, “green”], “age”: 42}”””, Pojo::class.java) } 哪个抛出exception java.lang.IllegalArgumentException: Parameter specified as non-null is null: method Pojo., parameter […]