我开发了 android 小部件应用程序并且它工作正常。现在我的客户问,当用户安装这个应用程序时,它需要自动放置在主屏幕的顶部位置。这该怎么做?请帮我。
我有一个与用户相关的数据流.我也为每个用户都有一个状态,我可以从DB异步获取.
我想用每个用户的一个子流分离我的流,并在实现子流时为每个用户加载状态,以便可以相对于该状态处理子流的元素.
如果我不想下游合并子流,我可以做一些事情groupBy和Sink.lazyInit:
def getState(userId: UserId): Future[UserState] = ...
def getUserId(element: Element): UserId = ...
def treatUser(state: UserState): Sink[Element, _] = ...
val treatByUser: Sink[Element] = Flow[Element].groupBy(
Int.MaxValue,
getUserId
).to(
Sink.lazyInit(
elt => getState(getUserId(elt)).map(treatUser),
??? // this is never called, since the subflow is created when an element comes
)
)
Run Code Online (Sandbox Code Playgroud)
但是,如果treatUser成为a ,这不起作用Flow,因为没有相应的Sink.lazyInit.
由于groupBy仅在推送新元素时才实现子流,因此应该可以使用此元素来实现子流,但是我无法调整groupBy的源代码以使此工作始终如一.同样,Sink.lazyInit似乎不容易翻译成Flow案例.
有关如何解决这个问题的任何想法?
我Object从方法中得到一个值.我知道这个对象将是类型Int或类型Long,但我事先并不知道它将是哪一个.我如何将其投射到Int或Long?
不幸的是,我无法更改提供此方法的方法的返回类型,因此无法作为解决方案..