我有一个应用程序从 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
我想“交叉产品”两种类型。
我所说的“类型的叉积”的意思是,例如我有两种类型,
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直接手动编辑?
我正在尝试从服务访问我的 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) 我有 3个部署a-depl,,,,b-depl。c-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) 我为 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
android ×2
kotlin ×2
kubernetes ×2
android-room ×1
listadapter ×1
minikube ×1
nginx ×1
typescript ×1