我试图创建一个方法来更新用户界面,当活动开始通过在抽屉中设置TextView的文本。 我不断收到一个TextView不能为空的错误? 我得到的错误是非法状态exceptionuserEmail不能为空 这是更新导航抽屉中的配置文件信息的updateUI private fun updateUI(user:FirebaseUser?) { if (user != null) { val userEmailText = findViewById(R.id.userEmail) userEmail.text = user.email val errorTriage : String? = user.email println(“User Email is =”+errorTriage) } else { val userEmailText: TextView = findViewById(R.id.userEmail) userEmailText.text = “Johndoe@someemail.com” userNameText.text = “John Doe” }} 如果用户已经登录,那么这是对UpdateUI的调用,如果更新导航抽屉中的配置文件数据,这是什么问题。 如果没有,则启动FirebaseUI登录活动。 override fun onStart() { super.onStart() //Checks to […]
我想利用kotlin的expression式和generics方法来简化Android的共享偏好api。 而不是一直调用getString()&getInt()等,我想要做的是创建一个扩展函数,它将根据函数的返回types进行切换,并调用适当的方法。 如下所示: fun SharedPreferences.get(key: String): T? { when (T) { //how do I switch on return type and call appropriate function? is String -> getString(key, null) is Int -> getInt(key, -1) is Boolean -> getBoolean(key, false) is Float -> getFloat(key, -1f) is Long -> getLong(key, -1) } return null } 当然,这是行不通的。 但是在expression函数的返回types时有什么解决方案吗? 所有的建议都欢迎。
我正在尝试创建一个用于创建JSONObjects的DSL。 这是一个建造者类和一个示例用法: import org.json.JSONObject fun json(build: JsonObjectBuilder.() -> Unit): JSONObject { val builder = JsonObjectBuilder() builder.build() return builder.json } class JsonObjectBuilder { val json = JSONObject() infix fun String.To(value: T) { json.put(this, value) } } fun main(args: Array) { val jsonObject = json { “name” To “ilkin” “age” To 37 “male” To true “contact” To […]
我有Android图形视图和查看传呼机的麻烦。 当我设置isScalable =真正的新页面scrols而不是图形。 我想提供图形滚动和传呼机滚动在一起。 我必须在Bachelour的文凭课程中使用它(对不起英语不好) 码 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val args = arguments val date = args!!.getString(“DATE”).toDate() LoadData().execute(date) val sdf = DateAsXAxisLabelFormatter(context, SimpleDateFormat(“HH:mm”)) temperature_graph!!.gridLabelRenderer.labelFormatter = sdf temperature_graph!!.setOnClickListener { } PostExectute任务中的代码 override fun onPostExecute(result: List?) { super.onPostExecute(result) result!!.let { var list: MutableList = ArrayList() val temp_gragh = view!!.findViewById(R.id.temperature_graph) result.mapTo(list) { […]
我正在尝试编写一个通用的基本活动,它指定它的ViewModel键入一个通用的参数: abstract class BaseActivity : AppCompatActivity() 现在我正在尝试为ViewModel编写一个延迟的初始化属性: val viewModel by lazy { ViewModelProviders.of(this, getFactory()).get(T) } 显示的错误是Type Parameter T is not an expression 还使用::class或::class.java没有帮助。 谁能解释一下这个问题吗? 编辑:我试图使用像这样的一个具体化的内联函数: inline fun AppCompatActivity.obtainViewModel(factory: ViewModelProvider.Factory): T { return ViewModelProviders.of(this, factory).get(T::class.java) } 像这样使用它: abstract class BaseActivity : AppCompatActivity() { val viewModel by lazy { obtainViewModel(getFactory()) } 现在我得到错误,T不能被用作一个具体的参数。 编辑2:到目前为止最好的解决方案似乎是这样的: 链接 ,但它的开销,以实现每个扩展类中的抽象标记。
我试图用简单的测试主持人来覆盖,看起来像下一个: class Presenter{ fun getData(params:SomeParams) { usecase.execute(getObservable, params) } private fun getObservable() = object :DisposableObserver{ override fun onComplete() {} override fun onNext(t:SomeData) {} override fun onError(e: Throwable) {} } } 这是我的简单测试: @Test fun getContacts() { presenter.getData() var observer = Mockito.mock(DisposableObserver::class.java) as DisposableObserver verify(useCase).execute(observer, someParams) } 和最后一行后我得到下一个错误: Argument(s) are different! Wanted: useCase.execute( com.test.PresenterTest$getObservable$o$1@579d011c, kotlin.Unit ); -> […]
鉴于下面的代码,以获得一个不错的列表中的所有帐户列表我必须执行以下操作: data class Customer(val accounts : List) data class Account(val number : String) fun getCustomers() = arrayListOf( Customer( arrayListOf(Account(“1”),Account(“2”)) ), Customer( arrayListOf(Account(“3”),Account(“4”)) ) ) fun main(args: Array) { // long println(getCustomers().map{ it.accounts }.flatten().map{ it.number }) // a little shorter (just discovered while typing the question) println(getCustomers().flatMap{ it.accounts }.map{ it.number }) 游乐场链接 在Groovy中,我可以这样做: println(getCustomers()*.accounts*.number.flatten()) // or […]
更确切地说,我需要Dispatch函数,就像在python win32com.connect lib中一样。
object SampleObject{ fun getSampleText(): String = “123” } class SampleClass { fun getSampleText(): String = “123” } 没有字段,只有方法。 ActivityA启动ActivityB 。 在ActivityB有一个对SampleObject.getSampleText()和SampleClass().getSampleText()的调用。 然后ActivityB完成。 最佳做法是什么? 使用对象还是使用类实例?
我试图用AlarmManager设置闹钟,但我的BroadcastReceiver从来没有被调用。 这是我的片段。 val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { //Never gets hit } } context.registerReceiver(receiver, IntentFilter(LOCAL_NOTIFICATION)) val intent = Intent() intent.action = LOCAL_NOTIFICATION val alarmManager = context.getSystemService(ALARM_SERVICE) as? AlarmManager val pendingIntent = PendingIntent.getService(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT) val calendar = Calendar.getInstance() calendar.add(Calendar.SECOND, 10) alarmManager?.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent) 我试过在AndroidManifest.xml中注册一个广播接收器,但似乎没有任何工作。