java - 如何在没有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 的情况下获取类文件路径?
解决方案
推荐阅读
- sql - 只有所有值都相等时对值进行分组
- xslt - XSLT:谓词内 key() 的行为
- python - 重采样错误:ValueError:无法使用方法或限制重新索引非唯一索引
- java - 自动生成代码以动态创建 Java 对象(反射)
- python - SQLite3 在第二个查询中绑定的数量不正确
- python-3.x - 是否有一个名为 document_base 的包?
- python - Pip3 和 python 不同步 | ModuleNotFoundError:没有名为“numpy”的模块`
- python - 嵌套python类(或django外键)的正确方法。*概念/工程问题*
- c# - 在后面的代码中创建文本框后使用文本框
- java - javax.xml.bind.JAXBException 与 Java 11