我正在构建的应用程序使用带有路线的组合导航。挑战在于起始目的地是动态的。
这是一个最小的例子:
class MainActivity : ComponentActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContent {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "dynamic/1", // doesn't work
// startDestination = "static", // workaround
) {
composable(
route = "dynamic/{$ARG_ID}",
arguments = listOf(navArgument(ARG_ID) { type = NavType.StringType }),
) {
val id = it.arguments?.getString(ARG_ID)
Text("dynamic route, received argument: $id!")
}
// part of the workaround
// composable(
// route = "static",
// ) {
// LaunchedEffect(this) {
// navController.navigate("dynamic/1") …Run Code Online (Sandbox Code Playgroud) android android-jetpack-navigation android-jetpack-compose android-navigation-graph
我已经阅读了几个关于何时使用活动以及何时使用应用程序上下文的讨论(例如在此SO帖子上).
我想知道使用活动或应用程序上下文对Toast.makeText()方法有什么影响.
文档仅简要说明参数context:
上下文:要使用的上下文.通常是您的Application或Activity对象.
我的问题是
还有什么要考虑的?
我的应用中有多个网络电话.我喜欢在这个变换器中使用compose运算符在IO线程中运行网络请求:
public static <T> Transformer<T, T> runOnIoThread()
{
return tObservable -> tObservable.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() );
}
Run Code Online (Sandbox Code Playgroud)
只要我只有一个网络呼叫,这似乎运作良好.但是,如果我按照以下示例链接它们,我将获得Android的NetworkInMainThreadException.
public Observable<String> networkCall1()
{
return <NETWORK_CALL_1()>
.compose( runOnIoThread() );
}
public Observable<String> networkCall2( String input )
{
return <NETWORK_CALL_2(input)>
.compose( runOnIoThread() );
}
public Observable<String> chainedCalls()
{
return networkCall1()
.flatMap( result1 -> networkCall2( result1 ) );
}
Run Code Online (Sandbox Code Playgroud)
之前我的想法是compose在调用之前应用于完整的可观察链,而后来的compose调用将"覆盖"前一个的行为.但实际上,看起来observeOn第一个compose(observeOn主线程)的compose调用支配第二个调用(subscribeOnIO线程).一个明显的解决方案是有两个版本networkCall1- 一个应用调度程序而另一个不应用.但是,这会使我的代码非常冗长.
你知道更好的解决方案吗?你能解释一下在一个可观察的链中应用调度程序两次(使用compose)的行为吗?
编辑:我正在使用RxJava进行网络调用改造.
我发现了很多关于HTTP状态代码含义的答案和解释。我的问题特别是关于对登录端点的POST请求,该请求例如要求提供用户名和密码以及提供不正确用户名和密码的情况。
一些想法:
400错误的响应 我认为此代码不合适,因为它表示该请求在语法上是不正确的,并且服务器无法理解,此处不是这种情况。登录数据在语义上是不正确的。
401未经授权 这对我来说是棘手的部分。如果401仅出现在需要身份验证标头的请求上,那么这是不正确的。但是,如果401可能出现在所有要求身份验证的请求上(作为标头或在正文中),则401是候选对象。
403禁止 通常,如果用户已经通过身份验证并为系统所知,但请求了不允许其访问的资源,则返回403。在登录之前,绝对不会对用户进行身份验证。我不知道未经身份验证的用户是否有403的语义。
得知答案或听到您的想法我很高兴。
我有这些模型:
class Container(models.Model):
...
class Meta:
constraints = [
models.CheckConstraint(
check=~Q(elements=None),
name='container_must_have_elements'
),
]
class Element(models.Model):
container = models.ForeignKey(Container),
related_name='elements',
on_delete=models.CASCADE
)
Run Code Online (Sandbox Code Playgroud)
我想强制每个Container对象必须至少有一个Element通过外键关系引用它的约束。
如您所见,我已经添加了一个检查约束。但是,对象~上的否定运算符Q似乎是被禁止的。django.db.utils.NotSupportedError: cannot use subquery in check constraint当我尝试应用生成的迁移时,我得到了。
如果没有否定运算符,约束似乎是有效的(它只会由于数据完整性错误而失败)。
有没有另一种方法可以表达这个约束,以便它支持CheckConstraint?(例如,有没有办法检查集合是否elements为空?)
我喜欢 的方法FragmentFactory,它可以将依赖项传递给构造函数中的片段。
我想将自定义FragmentFactory与FragmentStatePagerAdapter.
我在活动中托管视图寻呼机。我可以创建一个自定义片段工厂并将其分配给使用的活动
supportFragmentManager.fragmentFactory = CustomFragmentFactory()
Run Code Online (Sandbox Code Playgroud)
然后我可以用它supportFragmentManager来初始化我的FragmentStatePagerAdapter. 到目前为止还好。
我的问题是视图寻呼机中的片段显示依赖于位置的数据。
假设我有一个列表items和ItemFragment,它显示在显示 的视图寻呼机中items[position],因此有一个如下的构造函数:
class ItemFragment(val item: Item) : Fragment()
Run Code Online (Sandbox Code Playgroud)
我必须如何实现CustomFragmentFactoryandFragmentStatePagerAdapter的getItem(position: Int)函数才能实现与此等效的安全功能:
override fun getItem(position: Int) = ItemFragment(items[position])
Run Code Online (Sandbox Code Playgroud) android android-fragments fragmentstatepageradapter androidx android-fragmentfactory
android ×4
androidx ×1
django ×1
django-orm ×1
django-q ×1
httpresponse ×1
java ×1
rest ×1
rx-java ×1
toast ×1