在我们的 Android 应用程序中,我们希望将 Compose 引入一个简单的调试屏幕,我们可以在其中启用/禁用 SharedPreferences。我正在尝试使用 Compose 界面来运行它MutableState- 但它并不像我想象的那样工作。我的计划是暂时用于MutableState在 SharedPreferences 中设置布尔值(在稍后迁移到 DataStore 之前)。
这是我的想法:
private class MyOwnState(startWith: Boolean) : MutableState<Boolean> {
override var value: Boolean = startWith
override fun component1(): Boolean = value
override fun component2(): (Boolean) -> Unit = { value = it }
}
// then, in composable:
var value by remember { MyOwnState(false) }
Run Code Online (Sandbox Code Playgroud)
当然,在现实生活中我会覆盖value- 但这个例子就足够了,因为它不起作用。状态更改不会传播,UI 也不会更新。
为了说明这一点,我将代码片段by remember { mutableStateOf(false) }和by remember { MyOwnState(false) }. 第一个有效(开关已更新),第二个无效。 …
我正在使用Java应用程序将UDP数据包发送到Android设备.我有另一个Java应用程序接收这些UDP数据包并显示其数据 - 非常简单.
现在我正在研究一些路由算法 - 因此,知道UDP数据包自发送以来的跳数有多好.我的想法是只读出数据包的TTL(生存时间)值并显示它.你知道纯Java是否可行吗?该课程DatagramPacket根本没有给出任何提示.
我想这是不可能的,因为这些信息可能已经在较低层删除了,但我只想确定.:-)
我正在使用GreenDaoorm库来创建数据库,它与代码中的第一个创建数据库示例一起使用.
现在问题是我找不到任何文档或任何与数据库从资产文件夹复制到内存中数据库相关的内容.
我有两个列表:一个带有Boolean应保留a的旧数据,另一个应与旧数据合并的新数据。可以通过以下单元测试来最好地看出这一点:
@Test
fun mergeNewDataWithOld() {
// dog names can be treated as unique IDs here
data class Dog(val id: String, val owner: String)
val dogsAreCute: List<Pair<Dog, Boolean>> = listOf(
Dog("Kessi", "Marc") to true,
Dog("Rocky", "Martin") to false,
Dog("Molly", "Martin") to true
)
// loaded by the backend, so can contain new data
val newDogs: List<Dog> = listOf(
Dog("Kessi", "Marc"),
Dog("Rocky", "Marc"),
Dog("Buddy", "Martin")
)
// this should be the result: an intersection that preserves the extra Boolean,
// …Run Code Online (Sandbox Code Playgroud) 最近,有人问我可以建议我使用Kotlin stdlib的哪些功能来处理某个问题:将某些具有相同开始/结束时间的会议合并到一个列表中。
假设这个数据类召开了一次会议:
data class Meeting(val startTime: Int, val endTime: Int)
fun main() {
val meetings = listOf(
Meeting(10, 11),
Meeting(12, 15), // this can be merged with
Meeting(15, 17) // this one
)
println(combine(meetings))
// should print: [Meeting(startTime=10, endTime=11), Meeting(startTime=12, endTime=17)]
}
fun combine(meetings: List<Meeting>): List<Meeting> {
// TODO: elegant, functional way to do this?
}
Run Code Online (Sandbox Code Playgroud)
我已经使用来解决了这个问题fold,但是我不觉得这是正确的用法(一个简单的forEach应该就足够了):
fun combine(meetings : List<Meeting>) : List<Meeting> {
return meetings.fold(mutableListOf<Meeting>()) { combined: MutableList<Meeting>, meeting: Meeting ->
val lastMeeting = combined.lastOrNull()
when …Run Code Online (Sandbox Code Playgroud) 我正在使用greenDao访问我的Android手机中的数据库.一切似乎都很好,并且遵守.但是当我运行该程序时,它在DaoMaster.java - > OpenHelper类,createAllTables上的onCreate方法(db,false)崩溃;
以下是异常消息:
>05-03 15:40:34.109: E/AndroidRuntime(28587): FATAL EXCEPTION: main
05-03 15:40:34.109: E/AndroidRuntime(28587): java.lang.NoClassDefFoundError: com.hook38.sporttimer.model.sql.DaoMaster
05-03 15:40:34.109: E/AndroidRuntime(28587): at com.hook38.sporttimer.model.sql.DaoMaster$OpenHelper.onCreate(DaoMaster.java:42)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:165)
05-03 15:40:34.109: E/AndroidRuntime(28587): at com.hook38.sporttimer.controller.CountdownTimerStoreController.<init>(CountdownTimerStoreController.java:32)
05-03 15:40:34.109: E/AndroidRuntime(28587): at com.hook38.sporttimer.controller.CountdownTimerController.<init>(CountdownTimerController.java:57)
05-03 15:40:34.109: E/AndroidRuntime(28587): at com.hook38.sporttimer.CountDownTimerActivity.onCreate(CountDownTimerActivity.java:49)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.app.Activity.performCreate(Activity.java:4465)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-03 15:40:34.109: E/AndroidRuntime(28587): at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 15:40:34.109: E/AndroidRuntime(28587): at …Run Code Online (Sandbox Code Playgroud) 我有以下程序:
#include <iostream>
using namespace std;
int main()
{
int array[] = {1, 2, 3};
int a = array[0],
b = array[1],
c = array[2];
cout << c << endl;
}
Run Code Online (Sandbox Code Playgroud)
这打印3,到目前为止一切都很好.但是我想知道是否有更优雅的语法可以同时从数组中声明多个变量.例如(只是一个想法,不编译):
int [a, b, c] = array;
Run Code Online (Sandbox Code Playgroud)
在C++或其中一个新标准中是否有这样的功能?我不可能是唯一一个看它的人.
或者:从一个数组中一次设置多个变量的最优雅方法是什么?
在当前的项目中,我正在编写C++,我经常使用STL类映射,设置和列表.现在我感兴趣的是有没有办法通过使用内部数据类型来清理一些代码.例如:
std::map<uint64_t, std::list<int32_t> > mymap;
// add something to the map
for (std::map<uint64_t, std::list<int32_t> >::const_iterator it = mymap.begin (); it != mymap.end (); it++) {
// iterate here
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我可以替换,std::map<uint64_t, std::list<int32_t> >::const_iterator例如mymap.const_iterator,但不编译.在这里引用g ++:
error: invalid use of ‘std::map<long long unsigned int, std::list<int, std::allocator<int> >, std::less<long long unsigned int>, std::allocator<std::pair<const long long unsigned int, std::list<int, std::allocator<int> > > > >::const_iterator’
Run Code Online (Sandbox Code Playgroud)
有关如何做到这一点的任何想法?还是不可能?
我想根据“拆分谓词”对列表中的特定项目进行分组。我的意思的一个例子:
val list = listOf("1", "2", "3", "", "4", "5", "6", "", "7")
// looking for: a nice readable (maybe functional?) way to get to:
val result = listOf(
listOf("1", "2", "3"),
listOf("4", "5", "6"),
listOf("7"),
)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我想将列表拆分为item.isBlank()我也想在此过程中删除的项目。
我知道如何强制执行,但我认为必须有一种好的、可读的、实用的方法!
非常感谢和问候
马克