标签: kotlin-android-extensions

尝试访问Kotlin片段中的视图时出现NullPointerException

如何使用Kotlin Android扩展程序Fragment?如果我在里面使用它们onCreateView(),我得到这个NullPointerException例外:

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View android.view.View.findViewById(int)'

这是片段代码:

package com.obaied.testrun.Fragment

import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*

public class CardSelectorFragment : Fragment() {
    val TAG = javaClass.canonicalName

    companion object {
        fun newInstance(): CardSelectorFragment {
            return CardSelectorFragment()
        }
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
        btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }

        return rootView
    }
}
`
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-android-extensions

210
推荐指数
4
解决办法
4万
查看次数

Android Studio中过时的Kotlin运行时警告

下载并安装了最新的Kotlin插件后,我从Android Studio发出了Outdated Kotlin Runtime警告,告诉我:

您在'kotlin-stdlib-1.1.2'库中的Kotlin运行时版本是1.1.2,而插件版本是1.1.2-release-Studio2.3-3.应更新运行时库以避免兼容性问题.

我尝试单击" 更新运行时"按钮,但收到另一条消息:

目前不支持Gradle项目的自动库版本更新.请手动更新build.gradle.

如何解决这个问题?

android kotlin android-studio kotlin-android-extensions

154
推荐指数
4
解决办法
7万
查看次数

错误:任务':app:clean'的执行失败.无法删除文件

我正在尝试重建我的Android Studio Gradle项目(主要包含Kotlin代码),但它UnableToDeleteFileException在清理/重建过程中开始抛出:

Execution failed for task ':app:clean'.
> Unable to delete file: C:\Users\User\KotlinGameEngine\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.0.1\jars\classes.jar
Run Code Online (Sandbox Code Playgroud)

在我尝试更改项目的包结构后,这种情况开始发生.不幸的是,我是通过重命名和移动源文件夹而不是通过Android Studio重构来实现的,这是一个坏主意.

我一整天都在寻找解决这个问题的方法,这些都是我试过无用的东西:

  • 进行Gradle同步;
  • 重新安装Java JRE和Java SDK;
  • 重新安装最新版本的Android Studio(1.4);
  • 回滚到之前的AS版本(1.3);
  • 使AS缓存无效并重新启动;
  • 删除项目目录中的gradle.gradle目录;
  • 删除.gradle我的用户目录中的目录;
  • gradlew clean从AS终端运行;
  • 手动将源代码复制到一个新项目(奇怪的是它在项目中以某种方式存在......)

我尝试了一些有点成功的事情,但只让我再次执行一次干净并重新构建错误之前:

  • 关闭AS,手动删除构建文件并再次打开它;
  • java.exe在AS运行时杀死进程(这在技术上可以每次都完成,但是它很繁琐并且减慢了构建过程)

所以似乎编译Java进程可能由于某种原因锁定构建文件,但它也可能与Kotlin有关.我有一个(更成熟的)Java Android项目,我正在努力,虽然我在清理时无法重现此错误.这似乎只发生在我的Kotlin项目上.

有任何想法吗?

提前致谢.

更新:

我发现问题是由Kotlin Android插件引起的.当我apply plugin: 'kotlin-android'从模块的build.gradle文件中删除时,问题消失,并在重新插入时返回.随意提供任何洞察力.

更新2:

最后一次更新不是原因.我发现如果一个项目包含一个Kotlin文件,那么重建和清理就会失败.它继续失败,即使所有Kotlin文件都被删除,直到后台Java进程被杀死,这意味着它对构建文件有某种锁定.我在这里提交了一个错误,其中包含更多细节和重现错误的步骤:KT-9440

android kotlin android-studio android-gradle-plugin kotlin-android-extensions

152
推荐指数
11
解决办法
16万
查看次数

未解决的参考文献:kotlinx

我试图在Android Studio中试用Kotlin和Kotlin Android扩展程序.我已经在Ubuntu 14.04上的Android Studio v 1.5.1和OS X El Capitan上的Android Studio v 1.5.1中尝试了这一点,结果相同.

这是我在做的事情:

  1. 我安装了Kotlin插件1.0.0-beta-35950-IJ141-11
  2. 创建一个新的空白Android项目
  3. 将MainActivity文件转换为Kotlin(通过help-> findaction->将文件转换为kotlin)
  4. 为Kotlin配置项目

然后我进入生成的content_main.xml文件并为"Hello World!"添加一个id(hello).TextView中.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.gmail.npnster.mykotlinfirstproject.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/hello"
        />
</RelativeLayout>  
Run Code Online (Sandbox Code Playgroud)

然后在转换后的MainActivity中添加一行来设置TextView.(如下所示).Android Studio然后提示我(通过alt-enter)插入此行(也显示如下)

import kotlinx.android.synthetic.main.content_main.*
Run Code Online (Sandbox Code Playgroud)

所以在这一点一切似乎罚款

但是当我尝试编译这个时,我得到了

Unresolved reference: kotlinx
Unresolved reference: kotlinx
Unresolved reference: hello
Run Code Online (Sandbox Code Playgroud)

注意,我并没有安装科特林的Android扩展插件.截至几天前,现在应该将其包含在主插件中并标记为已过时.(事实上​​,如果您在使用最新插件时尝试安装它,则不会安装任何新内容)

有谁看到我做错了什么?

主要活动

import android.os.Bundle
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
import android.view.View
import …
Run Code Online (Sandbox Code Playgroud)

kotlin android-studio kotlin-android-extensions

102
推荐指数
9
解决办法
7万
查看次数

什么是Kotlin支持领域?

作为一名Java开发人员,支持领域的概念对我来说有点陌生.鉴于:

   class Sample {
        var counter = 0 // the initializer value is written directly to the backing field
        set(value) {
            if (value >= 0) field = value
        }
    }
Run Code Online (Sandbox Code Playgroud)

这个支持领域有什么用?Kotlin博士说:Kotlin的课程不能有字段.但是,有时在使用自定义访问器时需要有一个支持字段.为什么?在setter中使用属性名称本身的区别是什么.

    class Sample {        
        var counter = 0
        set(value) {
            if (value >= 0) this.counter = value // or just counter = value?
        }
    }
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-android-extensions

73
推荐指数
3
解决办法
8919
查看次数

适配器或ViewHolder中的Kotlin合成

我是kotlin的新人.我发现并尝试findViewById在我的Activity类中使用合成方法而不是烦人的方法,但我发现"如果我们想在View上调用合成属性(在适配器类中有用),我们还应该导入kotlinx.android.synthetic.main .视图.*." 但我无法弄清楚它究竟是如何起作用的?有什么例子吗?

kotlin kotlin-android-extensions

68
推荐指数
4
解决办法
3万
查看次数

58
推荐指数
4
解决办法
6万
查看次数

和...之间的不同 !!和?在Kotlin

我是Kotlin的新手.我想知道这两者之间的区别!!,并?在下面的代码.

我有两个片段首先使用!!mCurrentDataset而另一个?用于同一个变量.

if(!mCurrentDataset!!.load(mDataSetString.get(mCurrentDataSelectionIndex), STORAGE_TYPE.STORAGE_APPRESOURCE))
{
    Log.d("MyActivity","Failed to load data.")
    return false
}
Run Code Online (Sandbox Code Playgroud)
if(!mCurrentDataset?.load(mDataSetString.get(mCurrentDataSelectionIndex), STORAGE_TYPE.STORAGE_APPRESOURCE)!!)
{
    Log.d("MyActivity","Failed to load data.")
    return false
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

kotlin kotlin-android-extensions

51
推荐指数
5
解决办法
1万
查看次数

kotlin Activity不能扩展,这种类型是final,所以它不能被继承

我创建了一个kotlin Activity,但是我无法扩展活动,我收到的消息是" 这种类型是最终的,所以它不能继承 ".如何从最终删除kotlin活动,因此可以扩展.

kotlin kotlin-android-extensions

47
推荐指数
3
解决办法
1万
查看次数

意外覆盖:以下声明具有相同的JVM签名

我在Kotlin中遇到了这个错误:

class GitHubRepoAdapter(private val context: Context,
    private val values: List<GithubRepo>) : ArrayAdapter<GithubRepo>(context, R.layout.list_item,
    values) {
Run Code Online (Sandbox Code Playgroud)

私有val上下文:上下文

在日志中它说:

错误:(14,25)意外覆盖:以下声明具有相同的JVM签名(getContext()Landroid/content/Context;):fun():Context fun getContext():Context!

我无法看到导致问题的原因.

kotlin kotlin-extension kotlin-android-extensions

46
推荐指数
4
解决办法
2万
查看次数