小编ssu*_*ukk的帖子

如何初始化Kotlin的MutableList以清空MutableList?

看起来很简单,但是,如何将Kotlin初始化MutableList为空MutableList

我可以通过这种方式破解它,但我确信有更容易的东西:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()
Run Code Online (Sandbox Code Playgroud)

kotlin

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

与T.()的Kotlin函数签名是什么意思?

这是标准的Kotlin功能(据我所知)

inline fun<T> with(t: T, body: T.() -> Unit) { t.body() }
Run Code Online (Sandbox Code Playgroud)

但是,任何人都可以用简单的英文写下签名的意思吗?它是T的通用函数,第一个参数"t"表示类型T,第二个参数是函数类型的"body",接受函数???? 没有返回(单位)

我看到这个符号Something.() - >有些东西经常使用,即对于Anko:

inline fun Activity.coordinatorLayout(init: CoordinatorLayout.() -> Unit) = ankoView({ CoordinatorLayout(it) },init)
Run Code Online (Sandbox Code Playgroud)

但我不认为它在任何地方被解释了.()意味着......

kotlin

28
推荐指数
2
解决办法
4560
查看次数

Kotlin中的正则表达式匹配

如何在字符串中匹配secret_code_data:

xeno://soundcloud/?code=secret_code_data#
Run Code Online (Sandbox Code Playgroud)

我试过了

val regex = Regex("""xeno://soundcloud/?code=(.*?)#""")
field = regex.find(url)?.value ?: ""
Run Code Online (Sandbox Code Playgroud)

没有运气.我猜测 ?在代码可能成为问题之前,我应该以某种方式逃避它.你能帮我吗?

regex kotlin

27
推荐指数
1
解决办法
2万
查看次数

在Android Studio 1.3中支持代理

我刚刚将Android Studio升级到2015年7月28日构建的版本.代理设置已停止运行.

我在AS首选项和项目的gradle.properties中配置了它们,如下所示:

systemProp.http.proxyHost=some.proxy.adress.com
systemProp.http.proxyPort=3128
Run Code Online (Sandbox Code Playgroud)

然而,gradle构建失败,表明我应该在graddle属性或IDE中配置代理.

错误:连接超时:连接.如果您位于HTTP代理后面,请在IDE或Gradle中配置代理设置.

我还能尝试什么?

PS代理可以正常工作并从Android Studio首选项中正确选取,因为git可以正常工作.

proxy gradle android-studio

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

用AndroidX打破Renderscript?

由于我已经迁移到androidx,我无法运行Renderscript.我得到以下异常:

2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] JNI在应用程序中检测到错误:JNI NewGlobalRef调用挂起异常java.lang.ClassNotFoundException:没有在路径上找到类"android.support.v8.renderscript.RenderScript":DexPathList [[zip文件"/data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk"],nativeLibraryDirectories=[/data /app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/lib/arm64,/data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk!/lib/arm64-v8a,/ system/lib64,/ system/vendor/lib64]] 2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at java.lang.Class dalvik.system.BaseDexClassLoader java.lang上的.findClass(java.lang.String)(BaseDexClassLoader.java:93)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504].类java.lang.ClassLoader.loadClass(java.lang.String,boolean)(ClassLoader.java:379)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote6 4:java_vm_ext.cc:504] java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String)(ClassLoader.java:312)2018-10-12 16:27:58.328 27195-27195/pl .qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String,java.lang.ClassLoader,java.lang.String)(Runtime.java : - )2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at java.lang.String java.lang.Runtime.doLoad(java.lang .string,java.lang.ClassLoader)(Runtime.java:1099)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at void java.lang .Runtime.loadLibrary0(java.lang.ClassLoader,java.lang.String)(Runtime.java:1014)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc void 504.在void java.lang.System.loadLibrary(java.lang.String)(System.java:1657)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext .cc:504]在androidx.renderscript.RenderScript androidx.renderscript .RenderScript.internalCreate(android.content.Context,int,androidx.renderscript.RenderScript $ ContextType,int)(RenderScript.java:1408)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504]在androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context,int,androidx.renderscript.RenderScript $ ContextType,int)(RenderScript.java:1599)2018- 10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504]在androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context,androidx.renderscript .RenderScript $ ContextType,int)(RenderScript.java:1549)2018-10-12 …

android renderscript android-renderscript

12
推荐指数
3
解决办法
2512
查看次数

Kotlin中的Android Parcelable

我有这样的Java parcelable:

@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public KwerendaGraficzna createFromParcel(Parcel in) {
        return new KwerendaGraficzna(in);
    }

    public KwerendaGraficzna[] newArray(int size) {
        return new KwerendaGraficzna[size];
    }
};
Run Code Online (Sandbox Code Playgroud)

现在尝试在Kotlin中实现它:

companion object {
    @SuppressWarnings("rawtypes")
    val CREATOR: Parcelable.Creator<KwerendaGraficzna!> = object : Parcelable.Creator<KwerendaGraficzna!> {
        override fun createFromParcel(`in`: Parcel): KwerendaGraficzna {
            return KwerendaGraficzna(`in`)
        }

        override fun newArray(size: Int): Array<KwerendaGraficzna!> {
            return arrayOfNulls<KwerendaGraficzna!>(size)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

arrayOfNullsKwerendaGraficzna在声称收到要求时不会编译KwerendaGraficzna?

那我该怎么做?

android parcelable kotlin

10
推荐指数
1
解决办法
2698
查看次数

ProGuard在Android上导致SSL握手错误

我的应用程序在没有混淆的情况下表现良好(特别是在ProGuard中启用了WITH -dontobfuscate),但只要启用模糊处理,SSL查询就会失败并出现此类错误:

javax.net.ssl.SSLHandshakeException: Handshake failed
at com.google.android.gms.org.conscrypt.OpenSSLSocketImpl.startHandshake(:com.google.android.gms:418)
at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:212)
at com.android.okhttp.Connection.connect(Connection.java:1322)
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1410)
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:131)
at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:484)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:465)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:476)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:118)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:25)
Run Code Online (Sandbox Code Playgroud)

任何类可能导致它的想法?

ProGuard配置:

-dontoptimize
#-dontobfuscate
# Preverification is irrelevant for the dex compiler and the Dalvik VM.
-dontpreverify
-ignorewarnings
#-printusage "usage.txt"
# usuni?te z powodu crashlytics
#-printmapping "out.map"

# Reduce the size of the output some more.
#-repackageclasses ''
#-allowaccessmodification

# Switch off some optimizations that trip older versions of the Dalvik …
Run Code Online (Sandbox Code Playgroud)

ssl android proguard

10
推荐指数
1
解决办法
888
查看次数

Kotlin,Proguard和lambdas

我有一个简洁的功能,可以在视图上执行某些操作:

fun<T : View> Activity.withView(nr : Int, fn : T.()->Unit) {
    (findViewById(nr) as T?)?.fn()
}
Run Code Online (Sandbox Code Playgroud)

现在,当我在我的活动中使用此功能时:

    withView<Spinner>(R.id.spinner_toolbar) {
        adapter = AdapterIndeksuDlaSpinnera(this@NewMainActivity, PlaylistIndex)
Run Code Online (Sandbox Code Playgroud)

......在使用ProGuard之前一切正常.我可以看到AdapterIndeksuDlaSpinnera被破坏,正如预期的那样,但是当使用"无法加载类AdapterIndeksuDlaSpinnera"进行编程时应用程序失败(同时它应该抱怨错误的适配器名称).

我能够通过禁用可以在我的内部使用的所有适配器的修改来创建临时的解决方法 withView

-keep class pl.qus.xenoamp.adapter.** { *; }
Run Code Online (Sandbox Code Playgroud)

但我觉得这不是一个好的解决方案(我不知道其他类可以通过这种方式失败!).所以任何人都可以解释什么是问题,我应该添加什么ProGuard行来潜在地修复内部使用的其他类的类似事件withView

lambda android proguard kotlin

6
推荐指数
1
解决办法
1434
查看次数

如何通过反射使用Kotlin对象

假设我需要设置由String反射给出的Kotlin对象O中的String给出的属性A. 如果O是一个班级我可以做这样的事情(忽视它没有意义):

fun setValue(ownerClassName: String, fieldName: String, value : Any) {
    val enclosingClass = Class.forName(ownerClassName).newInstance()
    val enclosingClassField = enclosingClass.javaClass.getDeclaredField(fieldName)
    enclosingClassField.isAccessible = true
    enclosingClassField.set(enclosingClass, value)
}
Run Code Online (Sandbox Code Playgroud)

但是如果O是一个对象,我该怎么做呢?

reflection kotlin

6
推荐指数
2
解决办法
1814
查看次数

Google 云端硬盘范围已弃用?

我正在编写一个可以直接从 Google Drive 播放媒体的应用程序。

谷歌文档提到

https://www.googleapis.com/auth/drive.readonly

范围(请参阅此处:https : //developers.google.com/drive/web/scopes)这似乎正是我所需要的。然而,Android 驱动器 API 似乎只支持那里提到的两个范围:

Drive.SCOPE_FILE Drive.SCOPE_APPFOLDER

所以我尝试了几个像这样的非标准范围:

    mGoogleApiClient = new GoogleApiClient.Builder(XenoAmp.getContext())
            .addApi(Drive.API)
            //.addApi(DriveScopes.)
            //.addScope(Drive.SCOPE_APPFOLDER)
            .addScope(Drive.SCOPE_FILE)
            .addScope(new Scope("https://www.googleapis.com/auth/drive"))
            //.addScope(new Scope("https://www.googleapis.com/auth/drive.readonly"))
            //.addScope(new Scope("https://www.googleapis.com/auth/drive.metadata.readonly"))
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).build();
Run Code Online (Sandbox Code Playgroud)

然而我的 logcat 抱怨:

03-29 12:53:58.935:E/ClientConnectionOperation(9953):com.google.android.gms.drive.auth.c:授权失败:不支持的范围:https : //www.googleapis.com/auth/drive

那么 - 驱动范围不再受支持吗?那么如何才能访问 Goodle Drive 上的所有用户媒体文件?

android google-drive-android-api

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