小编Ami*_*war的帖子

如何以 MVVM 模式从小部件与数据库交互

我有一个应用程序从 api 获取数据并缓存在数据库中。我希望能够在小部件中显示这些数据(来自数据库),并添加一个按钮来更新数据,按下该按钮将获取数据并更新数据库,从而更新小部件。问题是因为我使用的是 mvvm,所以我不确定是否可以利用 livedata 和 jetpack 组件的花哨支持。

所以我只是在 widget update fun 中创建了一个 Dao 引用并获取了数据库。这确实获取了数据,但它没有更新文本视图,我记录了它并且它正确地向我显示了数据。

companion object {

        internal fun updateAppWidget(
            context: Context, appWidgetManager: AppWidgetManager,
            appWidgetId: Int
        ) {
            val db = AppDatabase.getInstance(context.applicationContext).weatherDao()
            val views = RemoteViews(context.packageName, R.layout.weather_widget)
            GlobalScope.launch {
                val weather = db.getCurrentWeatherMetricAsync()
                Log.d("TAG_TAG_TAG", "weather: " + weather.temperature);
                withContext(Dispatchers.Main) {
                    views.setTextViewText(R.id.tv_counter, " asd " + weather.temperature)
                }
            }
            appWidgetManager.updateAppWidget(appWidgetId, views)
        }
    }
Run Code Online (Sandbox Code Playgroud)

道对此有暂停的乐趣。

    @Query("select * from current_weather where id = 0")
    suspend fun getCurrentWeatherMetricAsync(): CurrentMetric

Run Code Online (Sandbox Code Playgroud)

您能告诉我如何与数据库交互以及与应用程序存储库交互的正确方法吗?

android kotlin appwidgetprovider android-room kotlin-coroutines

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

如何在打字稿中“交叉产品”类型?

我想“交叉产品”两种类型。

我所说的“类型的叉积”的意思是,例如我有两种类型,

type color = "red" | "green";
Run Code Online (Sandbox Code Playgroud)

type color = "red" | "green";
Run Code Online (Sandbox Code Playgroud)

我想获得一个仅接受这些字符串值的最终类型

"red.100"
"red.200"
"red.300"
"green.100"
"green.200"
"green.300"
Run Code Online (Sandbox Code Playgroud)

我知道我能做到这一点...

type colorShade = "red.100" | "red.200" | "red.300" | "green.100" | "green.200" | "green.300";
Run Code Online (Sandbox Code Playgroud)

...但正如您所看到的,随着任一列表的增长,我必须colorScheme手动更新类型。如何获取类型colorShade而无需colorScheme直接手动编辑?

typescript typescript-typings

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

ingress-nginx 错误连接被拒绝

我正在尝试从服务访问我的 ingress-nginx 服务,但它拒绝连接。这是我的入口

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: ticketing.dev
      http:
        paths:
          - path: /api/users/?(.*)
            backend:
              serviceName: auth-srv
              servicePort: 3000
          - path: /api/tickets/?(.*)
            backend:
              serviceName: tickets-srv
              servicePort: 3000
          - path: /?(.*)
            backend:
              serviceName: client-srv
              servicePort: 3000
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
---
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes minikube kubernetes-ingress

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

用于多个部署的 PersistentVolume 和 PersistentVolumeClaim

我有 3个部署a-depl,,,,b-deplc-depl现在这 3 个部署中的每一个都有一个数据库部署:a-db-depl, b-db-depl, c-db-depl。现在我想保留这些数据库中的每一个。我需要为所有部署创建一个 PV 还是为每个部署创建一个 PV?

我知道 PV <-> PVC 是一对一的关系。但我不知道 Depl <-> PV。有人可以帮忙吗?

截至目前,我不知道,所以我对所有 dp 部署使用单个 PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data/mongo"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
Run Code Online (Sandbox Code Playgroud)

kubernetes persistent-volumes persistent-volume-claims

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

DiffUtil 未更新 RecyclerView

我为 recyclerView 制作了一个适配器,并使用 DiffUtil 以更有趣的方式显示列表的更新。我使用谷歌代码实验室作为参考。但是列表没有从以下代码更新。请帮忙

class LaptopAdapter : ListAdapter<Laptop, LaptopAdapter.ViewHolder>(Diff()) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder.from(parent)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = getItem(position)
        holder.bind(item)
    }

    class ViewHolder private constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var ramText: TextView = itemView.findViewById(R.id.ramText)
        var diskText: TextView = itemView.findViewById(R.id.diskText)
        var screenText: TextView = itemView.findViewById(R.id.screenText)
        var osText: TextView = itemView.findViewById(R.id.osText)

        fun bind(item: Laptop) {
            ramText.text = item.ram.toString()
            diskText.text = item.disk
            screenText.text = item.screen.toString()
            osText.text = item.os
        } …
Run Code Online (Sandbox Code Playgroud)

android listadapter kotlin android-recyclerview android-diffutils

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