我正在考虑使用firebase作为Web应用程序用户数据的数据存储.我目前的想法是使用他们加入的时间戳作为引用该用户数据的密钥来存储每个用户的数据.这种方案的优点在于它是一种为用户分配唯一整数ID的简单方法,并且可以简化用户的时间顺序排序.
然而,缺点是如果两个"添加用户"请求被提交相同的数据,应用程序将很乐意添加两个单独的条目,这是不理想的.我可以随意乱扔东西(我开始认为我应该使用电子邮件作为密钥并通过连接数据优先考虑,而不是我当前的方案),但我想我不想这样做.有没有办法防止重复数据?
天真的方法可能只是做以下事情:
if(!searchFirebaseForUser(data)) {
addUser(data);
}
Run Code Online (Sandbox Code Playgroud)
但这绝对是一种竞争条件; 两个请求都很容易查询并在数据库中找不到用户,并且都添加.我想在一个交易中执行此操作,但似乎Firebase事务支持不包括这种情况.有办法处理这个吗?
我正在尝试拆分一个字符串.
我一直在搜索,但我只发现了split与数组一起使用的情况,所以例如如果你有字符串"i love stackoverflow"并使用split,输出将是[i,love,stackoverflow]
而不是我有一个这种格式的字符串,"URL_cars_es"我只想要es它的一部分,因为我有多个文件进入我的数据库与不同的语言让我说我有"URL_cars_it" "URL_cars_nb",等等.我只需要拆分并获得,nb,es,it所以我可以将它传递给我StorageReference并获取不同的文件
我URL_cars_es通过使用下面的代码得到
selecteditem = adapterView.getItemAtPosition(i).toString();
Run Code Online (Sandbox Code Playgroud)
而且我还需要修剪/拆分它es.
我的文档中有一个字段存储为时间戳,如下所示
"created_at": admin.firestore.FieldValue.serverTimestamp(),
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用 Cloud Functions 中的 admin lib 查找所有文档,这些文档具有该字段超过 24 小时的历史
const tsToMillis = admin.firestore.Timestamp.now().toMillis();
const results = await files.where("created_at", ">", tsToMillis - (24 * 60 * 60 * 1000)).get();
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上面的方法,但是我不确定如何获取值来比较它,或者有没有办法直接使用 FS 中的时间戳来执行此操作而不进行转换?
我遇到了一个奇怪的问题,在调试模式下我的应用程序工作正常,我怀疑混淆器正在做一些我无法登录的事情。
-keep class com.myapp.domain.model.** { *; }
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**
Run Code Online (Sandbox Code Playgroud)
所有序列化类都在模型包内,我即将发布一个新版本,上一个版本运行良好,我没有触及任何与 Proguard 相关的内容,只是 UI 更改。
implementation 'com.google.firebase:firebase-auth-ktx:21.3.0'
implementation 'com.google.android.gms:play-services-auth:20.5.0'
Run Code Online (Sandbox Code Playgroud)
正如我提到的,调试模式工作正常,我怀疑我的 buildtype 配置出了问题(更多关于 minifyEnabled 的信息)
buildTypes {
debug {
minifyEnabled false
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
我看到了这个响应:Firebase 身份验证失败并出现 FirebaseException:JsonResponse 的实例化失败
但我无法禁用发布应用程序上的混淆
我做了一个传递的方法int[],所以在每个位置我想设置4个数字,这就是我做的:
private void loadCars(int[] car){
Json json = new Json(getApplicationContext());
ArrayList<JSONObject> allCars;
allCars = json.gettTodosLosJson();
//Cargas los pictos desde el json
//Seteamos el texto de las opciones
Opcion1.setCustom_Img(json.getIcono(allCars .get(car[0])));
Opcion2.setCustom_Img(json.getIcono(allCars .get(car[1])));
Opcion3.setCustom_Img(json.getIcono(allCars .get(car[2])));
Opcion4.setCustom_Img(json.getIcono(allCars .get(car[3])));
}
Run Code Online (Sandbox Code Playgroud)
所以,当我想设置每辆车的数字时,我这样做:
loadCars(377,643,628,614);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,如果我设置方法就行,(int car1, int car2, int car3, int car4)但我不想这样做.
我已经看到我们可以禁用内部视图的连锁反应,clickable(interactionSource, indication)例如行或列,但我的问题是,我们是否可以从 Button或禁用它FloatingActionButton
我看到它FloatingActionButton有一个交互源属性,我已经尝试过这个
FloatingActionButton(
modifier = Modifier
.size(40.dp),
onClick = {
buttonState = when (buttonState) {
ButtonState.PRESSED -> ButtonState.UNPRESSED
ButtonState.UNPRESSED -> ButtonState.PRESSED
}
},
interactionSource = remember {
MutableInteractionSource()
})
Run Code Online (Sandbox Code Playgroud)
这不能消除连锁反应。
然后我尝试使用indication这样的修改器
FloatingActionButton(
modifier = Modifier
.size(40.dp)
.indication(
interactionSource = remember {
MutableInteractionSource()
},
indication = null
),
onClick = {
buttonState = when (buttonState) {
ButtonState.PRESSED -> ButtonState.UNPRESSED
ButtonState.UNPRESSED -> ButtonState.PRESSED
}
})
Run Code Online (Sandbox Code Playgroud)
也不起作用,然后我尝试的最后一件事是.clickable(...)在 Fab 按钮的修饰符中添加 ,但我认为这是毫无意义的,因为该按钮有自己的 onClick …