首页 > 解决方案 > 如何在没有getProtectionDomain的Android应用程序中获取Kotlin中当前类文件的路径

问题描述

我需要从当前代码行中记录两件事:

在 Kotlin,我可以通过

this::class

或者

this::class.java

然后,我应该能够通过

class.getProtectionDomain().getCodeSource().getLocation().getPath()

正如这里所建议的那样。问题是 getProtectionDomain 为 Android Activity 返回 null:

    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
        at android.view.View.performClick(View.java:7288)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View.performClickInternal(View.java:7258)
        at android.view.View.access$4000(View.java:808)
        at android.view.View$PerformClick.run(View.java:28019)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7615)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:7288) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 
        at android.view.View.performClickInternal(View.java:7258) 
        at android.view.View.access$4000(View.java:808) 
        at android.view.View$PerformClick.run(View.java:28019) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7615) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 
     Caused by: java.lang.NullPointerException: this::class.java.protectionDomain must not be null

同时这个类当然不是空的,因为我可以成功地看到它的名字

log(this::class.java.name)

那么如何在没有 getProtectionDomain 的情况下获取类文件路径?

标签: javaandroidkotlin

解决方案


推荐阅读