在Java中,我可以使用[class-name]。[method]来更改类中variables的值,如下所示: public class Main { public static void main(String[] args) { // Prints “Hello, World” to the terminal window. test.teste(); test.printlnvar(); } } class test{ public static int a = 0; public static int b = 0; public static void teste(){ a = 9; b = 12; } public static void printlnvar(){ System.out.println(“the value of […]
我在Android上有以下Kotlin类: class ThisApplication: Application() { lateinit var network: INetwork override fun onCreate() { super.onCreate() network = Network() } } 现在,任何外部类都可以通过简单的操作来获得INetwork引用: application.network 但是,这也使得外部类可以覆盖该值: application.network = myNewNetworkReference 我想避免第二个选项。 不幸的是,我不能使字段val因为它的初始化需要在onCreate回调内发生。 我也考虑过把这个领域变成私有的,并通过一个函数来暴露它,像这样: private lateinit var network: INetwork fun getNetwork() = network 但是,调用getNetwork()的人仍然可以为它分配一个新的值,如下所示: application.getNetwork() = myNewNetworkReference 我怎样才能使网络领域只读的外部类? 或者甚至更好,是否有一种方法来使其val即使我不能在构造函数中初始化它?
我是Android新手,尝试使用EventBus将消息从Fragment发送到其容器Activity。 但是,我收到错误: D/EventBus: No subscribers registered for event class com.app.todo.controllers.task.TaskListFragment$TaskCreateSelectEvent 以下是与EventBus相关的Activity类中的代码: public class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } @Subscribe(threadMode = ThreadMode.MAIN) fun onTaskCreateSelectEvent(event: TaskListFragment.TaskCreateSelectEvent) { Log.d(“TAG”, “On Main Activity”) } fun addFragment(fragment: Fragment) { val transaction = supportFragmentManager.beginTransaction() transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit) transaction.add(R.id.task_fragment_container, fragment) transaction.addToBackStack(fragment.javaClass.simpleName) transaction.commit() } public […]
我学习DI的Dagger 2,我只是做了这个代码注入改造: NetModule.kt @Module class AppModule(val mApplication: Application) { @Provides @Singleton fun provideApplication() : Application{ return mApplication } } AppModule.kt @Module class AppModule(val mApplication: Application) { @Provides @Singleton fun provideApplication() : Application{ return mApplication } } NetComponent.kt: @Singleton @Component(modules = arrayOf(AppModule::class, NetModule::class)) interface NetComponent { fun inject(activity: Activity) } CustomApplication.kt class CustomApplication : Application() { […]
我已经配置了一个Jenkins项目,在gradle构建和测试之后,调用以下规格的“Execute SonarQube Scanner”: sonar.projectKey=my_project_key sonar.projectName=my_Android sonar.projectVersion=1.0 sonar.sources=app/src sonar.java.binaries=app/build/intermediates/classes/debug sonar.coverage.exclusions=app/src/test/**,app/src/androidTest/**,app/src/main/res/** 这成功地运行SonarQube,并生成一个IP地址:9000的报告,测量:错误,漏洞,债务,代码嗅觉,和复制就像它应该。 然而,这个报告没有定义测试覆盖的代码。 SonarQube正在成功运行Kotlin插件并查看代码库本身,但是没有确定覆盖范围。 在使用Kotlin Android时,是否可以使用SonarQube来收集这些信息? 我确实尝试安装Jacoco,但在SonarQube结果中没有看到任何新的数据。
我的问题是以下几点: 我正在使用Android Studio 3.0.1,并试图尽可能快地创建新文件(使用MVP可能是Kotlin的挑战)。 例如,在Java中,您可以find以下内容: 然后,如果您在Option + Enter上单击(根据您的计算机),我可以选择创建我的界面: 我可以选择包和它将被放置的文件夹: 但是当我和Kotlin在一起时: 它只是让我选择类容器(我想要导入它,外部设置) Android Studio没有配备这个function的原因吗?
我已经使用Kotlin创建了一个片段,并且知道如何使用便捷的静态方法来设置Java中的片段参数。 喜欢这个: public static MyFragment newInstance(Bundle args){ MyFragment fragment = new MyFragment(); fragment.setArguments(args); return fragment; } 我试图在Kotlin中使用伴侣对象来实现这一点,因为它是静态的。 这是我迄今为止编译的内容: companion object { fun newInstance(@Nullable b: Bundle): MyFragment { val frag = MyFragment() frag.arguments = b return frag } } 我在想,如果我使用@Nullable注解,我将被允许传递null的包,但我不断收到以下错误,当我调用MyFragment.newInstance(null) : 致命例外:主进程:com.mobile.MyApp.labs,PID:5758 java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数b在com.mobile。 MyApp.ui.cart.fragments.MyFragment $ Companion.newInstance(MyFragment.kt:0)at com.mobile.MyApp.ui.cart.fragments.CartDetailsFragment.onCtaClicked(CartDetailsFragment.java:521)at com.mobile.MyApp。 ui.cart.fragments.CartDetailsFragment_ViewBinding $ android.view.View.performClick(View.java:6256)在androidknockknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)$ 1.doClick(CartDetailsFragment_ViewBinding.java:66)。 view.View android.os.Handler.handleCallback(Handler.java:789)android.os.Handler.dispatchMessage(Handler.java:98)android.os.Looper上的$ PerformClick.run(View.java:24701) .loop(Looper.java:164)at […]
我想知道如何启动一个类似于这个String [] errorSoon = {“Hello”, “World”};的数组String [] errorSoon = {“Hello”, “World”}; 在Kotlin 。 怎么做?
我正在接收具有地图包装器表的JSON数据模型。 我试图使用generics来传递超越包装的types,但它不能很好地在运行时翻译。 这里是我的JSON文件的一个例子: { “Table”: [ { “paymentmethod_id”: 1, “paymentmethod_description”: “Cash”, “paymentmethod_code”: “Cash”, “paymentmethod_is_ach_onfile”: false, “paymentmethod_is_element”: false, “paymentmethod_is_reward”: false, “paymentmethod_is_openedgeswipe”: false, “paymentmethod_update_user_id”: 1, “paymentmethod_insert_user_id”: 1, “paymentmethod_insertdate”: “2014-10-07 14:53:16”, “paymentmethod_deleted”: false, “paymentmethod_is_mobile_visible”: true } ] } 我使用的包装类叫做Table。 data class Table( @SerializedName(“Table”) val models : Array ) 实际的模型类是PaymentMethod。 data class PaymentMethod( @SerializedName(“paymentmethod_id”) val idNumber : Int = […]
我已经在Android ViewGroup类上创建了一个Kotlin扩展函数,以便它可以更轻松地进行布局膨胀调用。 所以,这是我的扩展: fun ViewGroup.inflate(layoutRes: Int): View { return LayoutInflater.from(context).inflate(layoutRes, this, false) } 然后我可以在适配器类中使用它来扩充布局: override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val v = parent.inflate(R.layout.view_item) return ViewHolder(v) } 我已经在适用于RecyclerView的适配器类中声明了这个扩展,这样可以使通货膨胀调用更容易。 但是我想要所有的适配器,或者我应该说所有的ViewGroup类来看这个扩展。 我想永久。 它似乎只是坚持在我宣布它不全球的地方。 我应该在哪里声明这个扩展,以便在任何时候使用视图组时,这个方法扩展将是可用的?