Tag: kotlin

尽管使用RxJava在另一个线程上订阅,但在使用Google的People API时仍然收到IllegalStateExceptionexception

注意:我使用Kotlin和RxKotlin来实现有用的扩展function。 我正在尝试使用Google的People API获取一些用户数据,并且将所有的AsyncTasks和东西都移植到了RxJava中。 一切工作除了这部分: private fun getGooglePerson(service: PeopleService?, account: GoogleSignInAccount) = Single.just(service?.people() ?.get(“people/me”) ?.setPersonFields(“emailAddresses,birthdays,genders,phoneNumbers”) ?.execute() ?: Person()) // If null, return an empty person (shouldn’t ever be null, though) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( onError = {/*Do something*/}, onSuccess = {/*Do something*/} ) 具体来说,我得到一个IllegalStateException的消息, Calling this from your main thread can lead to deadlock 。 我感到困惑,因为我的印象是,调用subscribeOn应该将其上下的所有东西(除非一个observeOn遵循它)转移到另一个线程(在这种情况下, Schedulers.io() […]

什么是Kotlin double-bang(!!)运算符?

我使用Android Studio将Java转换为Kotlin。 在实例variables之后,我得到了双重爆炸。 什么是双重的,更重要的是这个记录在哪里? mMap!!.addMarker(MarkerOptions().position(london).title(“Marker in London”))

Mockitounit testing:在一个类的所有方法调用中,返回“true”

我在kotlin SmsHandler有一个类,使用一个方法determineFiltersPass调用另一个类SmsSendingFilters : class SmsHandler(val filterPredicates: SmsSendingFilters) { fun determineFiltersPass(sms: SmsDto): Boolean = with(sms.filters) { var pass = true for (filter in FiltersDto::class.memberProperties) pass = when (FilterType.valueOf(filter.name.toUpperCase())) { UNIQUE -> if (filter.get(sms.filters) != null) { val unique = filter.get(sms.filters) as Boolean pass && if (unique) filterPredicates.isUnique().test(sms) else true } else pass && true RECENT -> […]

RecyclerView不可滚动,并且项目单击不在导航抽屉recyclerview中工作

这是我的数据绑定到recyclerview的代码: val linearLayoutManager = LinearLayoutManager(this) linearLayoutManager.orientation = LinearLayoutManager.VERTICAL dashBoardDataBinding?.recyclerviewDrawerList?.setLayoutManager(linearLayoutManager) val adapter = DifferentRowAdapter(it,this) dashBoardDataBinding?.recyclerviewDrawerList?.setAdapter(adapter) 这是我的适配器: class DifferentRowAdapter(var mList: List, val listner: DashboardActivity) : RecyclerView.Adapter() { var mClickListener: OnMeetingClickListner? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder? { val view: View when (viewType) { DaywiseEvents.CALENDAR_TYPE -> { view = LayoutInflater.from(parent.context).inflate(R.layout.item_city, parent, false) return DayViewHolder(view) } […]

数据库生成的属性不可用

我在一个基于Kotlin的项目中工作,它迫使我处理任何可能为null的属性。 在不受欢迎的情况下找出可能的空位是很好的; 但是我看到这么多了?. s和.!! s为数据库生成的属性,例如ID。 也许我在滥用这些运营商? 是否有任何约定标记属性不可空,但仍然有数据库生成值在这里? 如果我查找一个对象假设DB生成的值不再为空是安全的。 虚拟机可以被知道吗? 也许通过框架或语言提供的一些注释?

kodein,将数据注入简单的类

我是kotlin和kodein开发新的。 我想将数据注入一个简单的类,它不扩展。 我有我的MainActivity扩展KodeinAppCompatActivity() ,我的片段,它扩展KodeinSupportFragment()从我的简单类CallType调用一个函数。 但是这个函数必须改变其他简单类ConnectivitySate的布尔值。 我不想使用静态值。 下面,我的代码: class App : Application(), KodeinAware { override val kodein by Kodein.lazy { import(autoAndroidModule(this@App)) bind() with instance(CallType()) bind() with instance(ConnectivityState()) bind() with instance(ContactData()) } override fun onCreate() { super.onCreate() registerActivityLifecycleCallbacks(androidActivityScope.lifecycleManager) } 主要活动 : class MainActivity : KodeinAppCompatActivity() { 我的片段: class JournalFragment : KodeinSupportFragment(){ private val callType: CallType by instance() […]

Android RecyclerView无限滚动而不使用NULL对象来加载指标

我正在创建一个RecyclerView Adapter,在这个链接Android Recyclerview中加载无限数据 。 当我们想要显示加载指标时,我们写下面的代码: contacts.add(null); contactAdapter.notifyItemInserted(contacts.size() – 1); 我正在使用kotlin,不希望这个空对象被添加到列表中,也不希望在RecyclerView之外加载指示器(意味着加载指示器必须是列表中的一个项目)。 有什么办法,我们不需要添加一个空对象? 几乎互联网上的每个例子都使用这个空对象来显示加载指示符。 请显示任何代码示例或任何其他相关的博客文章来帮助。 谢谢。

如何根据选定的项目加载BottomNavigationView片段?

我有一个简单的应用程序写在Kotlin有一个BottomNavigationView。 这个想法是有一个单一的活动(MainActivity)与BottomNavigationView的每个选项卡加载片段。 我已经创建了一个片段,当选择一个选项卡(HomeFragment)时,我想加载一个片段,并且当活动选项卡更改时,已经在BottomNavigationView的图标下更改了文本。 现在我想在改变标签时膨胀/加载片段。 我怎么去做这个? MainActivity.kt: class MainActivity : AppCompatActivity() { private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> when (item.itemId) { R.id.navigation_enrollments -> { message.setText(R.string.title_enrollments) return@OnNavigationItemSelectedListener true } R.id.navigation_timeline -> { message.setText(R.string.title_timeline) return@OnNavigationItemSelectedListener true } R.id.navigation_home -> { message.setText(R.string.title_home) return@OnNavigationItemSelectedListener true } R.id.navigation_alerts -> { message.setText(R.string.title_alerts) return@OnNavigationItemSelectedListener true } R.id.navigation_profile -> { message.setText(R.string.title_profile) return@OnNavigationItemSelectedListener […]

无法在Ktor应用程序中运行启动程序Spek测试

我使用IntellJ版本2017.2.5构建Ktor应用程序。 我也想用Spek来测试应用程序。 我从一个非常简单的文件开始, import org.jetbrains.spek.api.Spek import org.jetbrains.spek.api.dsl.given import org.jetbrains.spek.api.dsl.it import org.jetbrains.spek.api.dsl.on import kotlin.test.assertEquals class SampleSpec : Spek({ given(“some context”) { on(“executing some action”) { it(“should pass”) { assertEquals(2, 2) } } } }) 当我右键点击运行测试,我得到以下错误: Feb 08, 2018 2:50:32 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable WARNING: TestEngine with ID ‘spek’ failed to discover tests java.lang.NoClassDefFoundError: org/junit/platform/engine/discovery/ClasspathSelector at org.jetbrains.spek.engine.SpekTestEngine.resolveSpecs(SpekTestEngine.kt:48) at […]

Android 3.0 Canary生成错误:不支持major.minor版本52.0

更新:我解决了从https://stackoverflow.com/a/37712635/288724的建议 这个链接没有提供一个很好的解决方案Android Studio 不支持major.minor版本52.0 但是这个链接https://stackoverflow.com/a/37712635/288724帮助我。 我看到很多人遇到过类似的问题。 然而,我的Android Studio 2.3.2完全正常,当我使用Android Studio 3.0 Canit 1和kotlin支持时,问题就显示出来了。 错误信息如下所示: Error:(1, 1) A problem occurred evaluating project ‘:app’. > java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0 有人可以给我任何建议吗? 非常感谢!