有没有办法对文档进行更新(如果存在),否则创建一个文档。现在我正在使用该update方法,但如果该文档不存在,则会抛出错误消息。
Firestore.instance.collection('partnerRequests').document(user.uid).updateData( {
DateTime.now().millisecondsSinceEpoch.toString():partnerRegistrationFormData})
Run Code Online (Sandbox Code Playgroud)
未处理的异常:类型“PlatformException”不是类型“String”的子类型
我在下面的代码中遇到了一个问题,几乎逐字逐句从Firebase SDK Java文档中复制了.我是一个真正的语言,比如来自PHP和JavaScript的webdev背景的Java.
基本上,addListenerForSingleValueEvent没有触发来给我回数据.我注意到了这一点,因为系统打印输出没有触发,因此我认为监听事件没有触发.
我怀疑这与我有限的知识如何与函数本身的工作方式有关,就像我缺少一些关于类和函数如何相互作用的结构知识.
任何帮助将不胜感激,谢谢.
class FireBase {
public static void main(String[] args) throws IOException {
// Fetch the service account key JSON file contents
FileInputStream serviceAccount = new FileInputStream("key.json");
// Initialize the app with a service account, granting admin privileges
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://ssworks-adwords.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
// As an admin, the app has access to read and write all data, regardless of Security Rules
DatabaseReference ref = FirebaseDatabase
.getInstance()
.getReference("petitions");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 首次使用适用于Android的Google Tasks API并遇到此问题:使用Tasks.whenAllComplete或.whenAllSuccess()和OnCompleteListener或OnSuccessListener我收到错误任务即使在我检查task.isComplete()时仍未完成它返回true.知道这里出了什么问题吗?
db.collection("calendar").get()
.continueWith(new Continuation<Task<QuerySnapshot>, Task<?>>() {
@Override
public Task<?> then(@NonNull Task<Task<QuerySnapshot>> task) throws Exception {
List<Task<QuerySnapshot>> tasks = new ArrayList<Task<QuerySnapshot>>();
for (DocumentSnapshot ds : task.getResult().getResult())
tasks.add(ds.getReference().collection("thingstodo").get());
return Tasks.whenAllSuccess(tasks);
}
})
.addOnCompleteListener(new OnCompleteListener<Task<?>>() {
@Override
public void onComplete(@NonNull Task<Task<?>> task) {
List<QuerySnapshot> lists = (ArrayList<QuerySnapshot>)task.getResult().getResult(); //error in this line
for (QuerySnapshot qs : lists)
for (DocumentSnapshot ds: qs) {
ScheduledItem item = ds.toObject(ScheduledItem.class);
//add to list including day
itemsList.add(item);
}
//list ready to be used!
}
});
Run Code Online (Sandbox Code Playgroud)
这是错误:
E/AndroidRuntime: …Run Code Online (Sandbox Code Playgroud) DatabaseReference Ref = FirebaseDatabase.getInstance().getReference(Constants.Client + "/" + path);
Ref.keepSynced(true);
Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Run Code Online (Sandbox Code Playgroud)
我理解ValueEventListener在一个新线程中运行,我是否应该在任何时候实际删除它以进行正确的线程管理?(没有太多并行运行的线程的示例).如果是的话,该怎么办?
java multithreading android firebase firebase-realtime-database
我正在使用此代码:
DocumentReference docRef = db.collection("Users").document("user_01");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null && document.exists()) {
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获得。我知道put()在 Cloud Firestore 上插入数据的帮助下,但我不知道如何获取放置在user_01.
从Firestore文档中查看此代码示例:
DocumentReference docRef = db.collection("cities").document("SF");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null && document.exists()) {
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
Run Code Online (Sandbox Code Playgroud)
https://firebase.google.com/docs/firestore/query-data/get-data
为什么检查一下document != null?如果我正确读取源代码(初学者),该exists方法将在内部检查无效.
我从 Cloud Firestore 读取数据:
firestoreDB.collection("events")
.whereEqualTo("type", eventType)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Event> eventList = new ArrayList<>();
for(DocumentSnapshot doc : task.getResult()){
Event e = doc.toObject(Event.class);
e.setId(doc.getId());
eventList.add(e);
}
//do something with list of pojos retrieved
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
Run Code Online (Sandbox Code Playgroud)
由于 onComplete 是一个 void 方法,我如何从外部方法获取 eventList?
例如,我尝试过:
List<Event> ReadCollection()
{
final List<Event> eventList = new ArrayList<>();
firestoreDB.collection("events")
.whereEqualTo("type", eventType)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override …Run Code Online (Sandbox Code Playgroud) 如何解决这个错误!
“无法解决:com.google.firebase:firebase-messaging:16.0.5”
Firebase 依赖版本是16.0.5,我也切换并玩了一些其他版本,仍然有错误。
def Firebase_version = "16.0.5"
implementation "com.google.firebase:firebase-auth:$Firebase_version"
implementation "com.google.firebase:firebase-messaging:$Firebase_version"
Run Code Online (Sandbox Code Playgroud)
我正在使用最新版本的类路径
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:4.0.2'
Run Code Online (Sandbox Code Playgroud)
和存储库
google()
jcenter()
Run Code Online (Sandbox Code Playgroud)
两者都添加:
安卓工作室:3.2.1
android firebase build.gradle firebase-authentication firebase-cloud-messaging
我的Android应用程序使用大量的结构化数据来向用户提供合适的建议,因此本地数据库似乎很合适。Room / DAO / ViewModel看起来是一个不错的体系结构,并且对底层实现有足够的抽象。里面的数据不会经常改变,并且一旦改变就只能单向流动:从服务器一直到用户设备中的本地数据库,再也没有其他方式。即使该应用很可能定期在线,对于大多数查询还是可以从本地数据进行处理的。
我正在使用Google Firebase处理后端服务,并使用Cloud Firestore数据库存储数据在服务器端。Firestore为脱机使用提供了用户数据的本地缓存,这比实现和同步自己的数据库要简单得多。是否有充分的理由避免这种方法?
还有一些类似的问题,例如: Firestore作为离线持久性机制的可靠性如何?或Firebase Cloud Firestore中的部分脱机同步。我认为这是不同的,因为我不是在寻找长期的离线持久性,而是一个可靠的本地副本,以避免不必要的数据传输。
在谈论Firebase Cloud Firestore时,这种非规范化到底意味着什么?我在互联网上阅读了几篇文章,并在此处找到了一些关于stackoverflow的答案,大多数答案都推荐这种方法。这种非规范化真正有什么帮助?总是有必要吗?
数据库扁平化和非规范化是一回事吗?
这是我的首要问题,希望我能找到一个可以帮助我理解这一概念的答案。我知道是不同的,但是我有两年的MySQL经验。