我想写一个unit testing,将validation下面的callInit方法。 但是,我有空指针exception行保存subscribe( 。我的问题是我如何validation在下面的方法中的下一个和onerror条件? override fun callInit() { val requestInit = RequestInit(os = “android”, osVersion = deviceUtil.osVersion(), appVersion = deviceUtil.apiVersion()) compositeDisposable.add( interactor.getInit(requestInit) .subscribe( { view.hideProgress() this.commercialLink = it.commercialLink view.updateScreen() }, { error -> view.onError(error) } ) ) } 测试方法: @Test fun should_update_commerciallink_AND_updateScreen_when_callInit() { val request = RequestInit(“android”, “version”, “osversion”) val responseInit = ResponseInit(false, false, “updatelink”, […]
我试图使用这两个实体之间的多对多关系。 @Entity data class Course( @Id @GeneratedValue var id: Long = 0, var name: String, var lectures: Int, @JsonIgnore @JoinTable(name = “CourseStudent”, joinColumns = arrayOf(JoinColumn(name = “courseId”, referencedColumnName = “id”)), inverseJoinColumns = arrayOf(JoinColumn(name = “studentId”, referencedColumnName = “id”)) ) val enrolled: List = emptyList() ) @Entity data class User( @Id @GeneratedValue var id: Long = […]
我正在制作一个可观察的LiveData对象列表,它应该包含Resource对象( https://developer.android.com/topic/libraries/architecture/guide.html#addendum )。 我不关心Resource对象所包含的数据types。 abstract class LiveResources : LiveData<Resource>() { private val mediatorLiveData = MediatorLiveData<Resource>() protected val resources = HashSet<LiveData<Resource>>() fun addResource(source: LiveData<Resource>) { resources.add(source) mediatorLiveData.addSource(source, resourceObserver) } fun removeResource(source: LiveData<Resource>) { resources.remove(source) mediatorLiveData.removeSource(source) } private val resourceObserver = Observer<Resource> { onSourceChange() } abstract fun onSourceChange() } 不幸的是,当我尝试使用LiveResources.addResource()与LiveData<Resource<List>>我得到TypeMismatch错误在我的IDE,说LiveData<Resource>是预期的。
那么,我有一个情况,在Class A我得到“X数据”。 我想在Object X存储这个“X DATA”一次,然后确保这个对象的值是不可能改变的。 (设置一次,忘记它)。 我的方法是: object X { var attribute1: String var attribute2: String } 显然,由于对象属性是var所以将来可以改变。 我怎么能避免这个? 有没有一种方法来分配值(在一段时间..),然后锁定对象,直到应用程序退出?
我想遍历我的一个类中的所有字段,过滤注释的字段,然后检查字段是否有一个特定的types。 所有我发现是field.returnType.isSubtype(other: KType)但我不知道如何得到我的其他类的KType 。 这是我的代码到目前为止: target.declaredMemberProperties.forEach { if (it.findAnnotation() != null) { if ( /* it.returnType is Component <- Here I need some working check */ ) { // do stuff } else { // do ther stuff } } }
我有时间接近传感器更改为 override fun onSensorChanged(event: SensorEvent) { val distance = event.values[0] val max = event.sensor.maximumRange a = System.currentTimeMillis() if (distance < Math.min(max, 8.toFloat())) { listener.onNear() } else { listener.onFar() } b = System.currentTimeMillis() System.out.println("That took " + (b- a) + " milliseconds") } 它出现在我的ProximityDetector.kt文件中 并使用我的应用程序显示它 timeTaken.setText(“That took ” + (b – a) + ” milliseconds”) 这是在我的SettingsActivity.kt文件 […]
我想写一个方法来计算提供的数字的标准偏差。 这里是这样的: fun calculateSD(numArray: List): Double { var sum = 0.0 var standardDeviation = 0.0 for (num in numArray) { sum += num } val mean = sum / numArray.size for (num in numArray) { standardDeviation += Math.pow(num – mean, 2.0) } val divider = numArray.size – 1 return Math.sqrt(standardDeviation / divider) } 但是,我想这也工作列表双,浮动等 所以它需要使用generics: […]
我正在使用谷歌示例中的todo-mvp-sample,想知道为什么开发者实现了统计活动(为什么使用活动而不是替换片段) 她有一个代码片段:来自TasksActivity private fun setupDrawerContent(navigationView: NavigationView) { navigationView.setNavigationItemSelectedListener { menuItem -> if (menuItem.itemId == R.id.statistics_navigation_menu_item) { val intent = Intent(this@TasksActivity, StatisticsActivity::class.java) startActivity(intent) } // Close the navigation drawer when an item is selected. menuItem.isChecked = true drawerLayout.closeDrawers() true } } 并在StatisticsActivty重复代码: private fun setupDrawerContent(navigationView: NavigationView) { navigationView.setNavigationItemSelectedListener { menuItem -> if (menuItem.itemId == R.id.list_navigation_menu_item) { […]
现在,我正在使用kotlin作为我的主要编程语言,我正试图简化Android的Recyclerview实现逻辑,我被困在以下几点: 比方说,我已经定义了下面的ViewHolder类,通过构造函数中的方法引用传播点击位置事件。 class CustomViewHolder(itemView: View, val onClick: (Int) -> Unit)) : RecyclerView.ViewHolder(itemView){ itemView.setOnClickListener { onClick.invoke(adapterPosition) } } 我怎样才能构建一个在构造函数中有方法引用的generics类的实例? 我的recyclerview实现在构造函数中有一个generics类,也是一个实体引用,可以通过在onCreateViewHolder上的reflection来创建我的CustomViewHolder类的实例: class CustomAdapter(val entityClass: Class) : RecyclerView.Adapter() { /* Usual recyclerview stuff */ //Method that I want to be called when a list item is clicked fun onListItemClicked(position: Int) { //do stuff } override fun onCreateViewHolder(parent: ViewGroup, […]
文档对我来说真的很神秘 通常,如果转换不可行,转换运算符将抛出exception。 >因此,我们称之为不安全的。 Kotlin中不安全的转换由中缀运算符> as完成(请参阅运算符优先级): val x:String = y作为字符串 因为“as”这个词在网络引擎中不容易find,所以我不能理解as和as的用法是以什么方式与运营商有关的 鉴于此代码: override fun onBindViewHolder(holder: RecyclerView.ViewHolder, item: ViewType) { holder as NewsViewHolder//why is not called holder2 considering is adressed to NewsViewHolder? holder.bind(item as RedditNewsItem) } 如果我摆脱了NewsViewHolder,intelliJ点绑定在红色。 原因是因为在方法绑定中有一个内部类 inner class NewsViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder( parent.inflate(R.layout.news_item)) { private val imgThumbnail = itemView.img_thumbnail private val description = itemView.description private […]