8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

将 json 响应作为流进行处理

user25472259 2月前

79 0

我有一个 http 响应,其主体是 ByteReadChannel。我知道内容是 JSON 对象数组。我需要通过 JSON 对象的属性来过滤该响应主体。由于数组...

我有一个 http 响应,其主体是 ByteReadChannel 。我知道内容是一个 JSON 对象数组。我需要根据对象的属性过滤该响应主体 JSON 。由于该数组可能包含至少数千个对象,因此我希望避免将整个内容读入内存,应用我的过滤器并将结果发送到客户端。

我怎样才能将其转换 ByteReadChannel 为,比如说, Flow<MyJsonObject> 流上的过滤器? Flow 这只是一个例子,也许有更好的类可以使用......

附言:我用 Ktor .

帖子版权声明 1、本帖标题:将 json 响应作为流进行处理
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user25472259在本站《kotlin》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 问题是您的 Compose UI 无法检测到 count 视图模型中的变化。

    您需要存储 count 在 State 对象中。在可组合对象中,您可以使用类似这样的方法( by 解开 State,使其成为 Int,可以更轻松地使用):

    var count: Int by remember { mutableStateOf(1) }
    

    每当更新此变量时,都会触发重组,并且 UI 也会相应更新。由于您使用视图模型进行存储,因此 count 您需要使用 Flow:

    class MainViewModel : ViewModel() {
        private val _count = MutableStateFlow(1)
        val count = _count.asStateFlow()
    
        fun rollDice() {
            Log.d("ViewModel", "ButtonClicked")
            _count.value = (1..6).random()
        }
    }
    

    每当 rollDice 调用 count ,流程都会发生变化。您可以使用以下命令将可组合项中的此流程转换为 Compose State 对象 collectAsStateWithLifecycle (您需要 gradle 依赖项 androidx.lifecycle:lifecycle-runtime-compose ):

    setContent {
        val mainViewModel: MainViewModel = viewModel()
        val count: Int by mainViewModel.count.collectAsStateWithLifecycle()
    
        Column(
            modifier = Modifier
                .fillMaxSize(),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center,
        ) {
            DiceImage(count = count)
    
            Button(onClick = {
                mainViewModel.rollDice()
            }) {
                Text(text = "Let's Roll")
            }
        }
    }
    
返回
作者最近主题: