小编Piw*_*iwo的帖子

在Rust中逐行读取大文件

我的Rust程序旨在逐行读取非常大(最多几GB)的简单文本文件.问题是,此文件太大而无法立即读取,或将所有行传输到a Vec<String>.

在Rust中处理这个问题的惯用方法是什么?

rust

13
推荐指数
1
解决办法
1万
查看次数

使用来自Koin的inject()函数输入不匹配

我在我的应用程序中使用依赖注入框架Koin.以下代码行在我的MainActivity中完美运行:

private val auth: FirebaseAuth by inject()
Run Code Online (Sandbox Code Playgroud)

不幸的是,同一行代码在自定义BroadcastReceiver中不起作用.Android Studio标记"inject()" - 函数为红色并告诉我它是一个未解析的引用(导入"org.koin.android.ext.android.inject"被标记为未使用).

当我尝试构建它时,我得到以下异常:

错误:(14,39)未解决的参考.由于接收器类型不匹配,下列候选者都不适用:public inline fun ComponentCallbacks.inject(name:String = ...):org.koin.android.ext.android中定义的Lazy

如何在这个类中进行注射,为什么它会失败?

android dependency-injection kotlin

5
推荐指数
1
解决办法
1619
查看次数

如何构建与firebase的聊天

我正在使用Cloud Firestore(NoSQL)来存储用户的个人资料信息,例如:

{
  "uid": "abc123",
  "name": "...",
  "friends": [
    "uid": "x234", 
  ]
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道如何构建从用户到用户的直接聊天.我想的是:

为每个用户文档添加一个附加字段,如:

"chats": [
 {
    "from": "name",
    "message": "...",
    ...
 },
  ...
]
Run Code Online (Sandbox Code Playgroud)

或者不使用Firestore进行聊天,我考虑使用具有类似结构的Firebase实时数据库.

最后一种方法的好处是,用户文档不会因大量聊天协议而"膨胀".

我需要一些建议,结构/实现最适合这个用例.

java android firebase firebase-realtime-database google-cloud-firestore

3
推荐指数
1
解决办法
4580
查看次数

Job Scheduler间隔被调用的方式太罕见了

我的应用程序安排JobScheduler,周期间隔为60秒:

val service = ComponentName(packageName, MonitorService::class.java.name)
val job = JobInfo.Builder(JOB_ID, service)
            .setPeriodic(interval) // interval is 60*1000
            .setPersisted(true)
            .setRequiresCharging(false)
            .build()
jobScheduler.schedule(job)
Run Code Online (Sandbox Code Playgroud)

我知道Android操作系统优化了作业调度程序的事实,因此它永远不会完全安排,但需要2~3分钟后.我在自己的设备上验证了这种行为(HTC One M8 with Android 6.0).

在许多(各种)的其它设备在该间隔是多少更不频繁(如一次/两次每小时仅).

我该如何解决这个问题?Job Scheduler可能不是我的用例的正确API吗?

android kotlin android-jobscheduler

1
推荐指数
1
解决办法
513
查看次数

Kotlin(Android)中RecyclerView中不需要的复选框选择

在我的应用程序中,我有一个RecyclerView,其中包含15个静态项目,包括一个TextView和一个CheckBox:

<android.support.v7.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="82dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:scrollbars="vertical" />
Run Code Online (Sandbox Code Playgroud)

单击该项目时,相应的复选框将设置为选中状态,并将该项目添加到选择列表中。

问题:当我向下滚动并选择一个项目时,再次向上滚动我总是看到另一个复选框已选中。在调试时,我注意到,只有我实际选择的项目已添加到列表中,但是,当在UI中随机检查/“选择”其他项目时,这仍然会带来不良的用户体验。

我怎样才能阻止这种奇怪的行为?

我正在使用视图持有者来管理项目视图:

private inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
            val checkBox: CheckBox = view.findViewById(R.id.checkbox)
            val text: TextView = view.findViewById(R.id.text)

            init {
                view.setOnClickListener { checkBox.isChecked = !checkBox.isChecked }
                checkBox.setOnCheckedChangeListener { _, isChecked ->
                    val itemText = dataset[adapterPosition]
                    logger.debug("state change $isChecked for $itemText")
                    if (isChecked) selectedItems.add(itemText)
                    else {
                        if (selectedItems.contains(itemText)) selectedItems.remove(itemText)
                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

我的onBindViewHolder()方法包含以下内容:

override fun onBindViewHolder(holder: MyViewHolder?, position: Int) {
            val itemText = dataset[position]
            holder?.text?.text …
Run Code Online (Sandbox Code Playgroud)

checkbox android kotlin android-recyclerview

0
推荐指数
1
解决办法
1050
查看次数