我有一个这样的课:
class dataModel {
String id, name;
Integer count;
dataModel() {}
}
Run Code Online (Sandbox Code Playgroud)
我从Firebase添加数据.
mDatabase.addValueEventListener(mListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
dataSet.add(dataSnapshot.getValue(dataModel.class));
//...
}
});
Run Code Online (Sandbox Code Playgroud)
当我将应用程序作为调试运行时,没有问题.但在它发布后,应用程序崩溃并出现错误:
com.google.firebase.database.DatabaseException: No properties to serialize found on class com.my.package.dataModel
Run Code Online (Sandbox Code Playgroud)
我有minifyEnabled 是的
我列出了从我的Cloud Firestore数据库获取值的POJO对象列表。这个列表本身就是一个类,每当我创建一个新的列表时都会记住要检索属性。事实是,列表不是在创建活动中填写的,而是之后的时间。我尝试添加循环,任务,等待,但未获得所需的结果。这是我令人满意地检索数据的方式:
private void retrieveData(){
reference = firestore.collection("attractions");
reference.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots,
@Nullable FirebaseFirestoreException e) {
attractionList.clear();
for (DocumentSnapshot snapshot : queryDocumentSnapshots) {
Attraction attraction = snapshot.toObject(Attraction.class);
addAttractions(attraction);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
每次创建新对象时,我都会检索数据:
public AttractionList() {
firestore.setFirestoreSettings(settings);
reference = firestore.collection("attractions");
attractionList = new ArrayList<>();
retrieveData();
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我在创建时在我的活动中检查列表大小:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_attraction);
Toolbar toolbar = findViewById(R.id.tb_attraction);
setSupportActionBar(toolbar);
//Creating POJO List and retrieving data
attractionList = new AttractionList();
Log.e("List Size: ", ""+attractionList.getAttractionList().size());
//List …Run Code Online (Sandbox Code Playgroud) 我正在尝试更新我的Android O应用程序,并且这样做需要更新以支持库26.
我的compileSdkVersion是26,targetSdkVersion 26,buildToolsVersion 26.0.1,支持库版本是26.0.1,播放服务/ firebase消息是11.0.4.我正在使用Android Studio 3.0 b2和android gradle插件3.0.0-beta2.看来这个版本对支持库冲突更加敏感.
我必须手动排除支持依赖项以解决冲突,因为播放服务和firebase链接对旧版本的支持库:
implementation("com.google.android.gms:play-services-auth:$playServicesVersion",{
exclude group: 'com.android.support'
})
implementation("com.google.android.gms:play-services-identity:$playServicesVersion",{
exclude group: 'com.android.support'
})
implementation("com.google.android.gms:play-services-base:$playServicesVersion",{
exclude group: 'com.android.support'
})
implementation("com.google.android.gms:play-services-analytics:$playServicesVersion",{
exclude group: 'com.android.support'
})
implementation("com.google.firebase:firebase-messaging:$playServicesVersion",{
exclude group: 'com.android.support'
})
implementation("com.google.firebase:firebase-analytics:$playServicesVersion",{
exclude group: 'com.android.support'
})
Run Code Online (Sandbox Code Playgroud)
这修复了我的所有依赖冲突,除了一个.
Google Play服务/ Firebase需要使用google-services gradle插件来解析生成的.json文件,并在应用中包含必要的密钥/秘密.我的build.grade有一个buildcript块,如下所示:
buildscript {
repositories {
maven { url "https://maven.google.com" }
jcenter()
}
dependencies {
classpath "com.google.gms:google-services:3.1.0"
}
}
Run Code Online (Sandbox Code Playgroud)
在脚本的最后,我应用插件.随着apply和classpath被注释掉,一切都正确编译.但是,似乎google-services 3.1.0增加了对支持库版本25.2.0的依赖,而我无法弄清楚如何覆盖它.消息是:
- 出了什么问题:任务':app:preDevelopmentDebugBuild'执行失败.
Android依赖项"com.android.support:support-v4"具有不同版本的编译(25.2.0)和运行时(26.0.1)类路径.您应该通过DependencyResolution手动设置相同的版本
请注意,我甚至无法降级到支持库25.4.0,因为我得到了相同的错误(只需用25.4.0替换上面的消息中的26.0.1).唯一有效的版本是25.2.0
运行./gradlew app:dependencies包含类路径依赖项,给我这个:
compile - Compile dependencies for 'main' sources (deprecated: …Run Code Online (Sandbox Code Playgroud) android firebase google-play-services android-gradle-plugin android-8.0-oreo
我有一个像下面这样的课程。
class Student {
public Student(Set<String> seminars) {
this.seminar = seminars;
}
Set<String> seminar;
public Set<String> getSeminar()
{
return seminar;
}
}
Run Code Online (Sandbox Code Playgroud)
并创建了一组如下所示的学生。
List<Student> students = new ArrayList<Student>();
Set<String> seminars = new HashSet<String>();
seminars.add("SeminarA");
seminars.add("SeminarB");
seminars.add("SeminarC");
students.add(new Student(seminars)); //Student 1 - 3 seminars
students.add(new Student(seminars)); //Student 2 - 3 seminars
seminars = new HashSet<String>();
seminars.add("SeminarA");
seminars.add("SeminarB");
students.add(new Student(seminars)); //Student 3 - 2 seminars
seminars = new HashSet<String>();
students.add(new Student(seminars)); //Student 4 - 0 seminars
Run Code Online (Sandbox Code Playgroud)
现在的问题是“我正在尝试获取参加过最多研讨会的学生人数”,正如您所看到的,有 2 名学生参加了 3 场(最多)研讨会,所以我需要获得该人数。
我使用流使用 …
签名ChronoUnit.DAYS.between method是:
公众之间的长期(时间颞1包含,时间颞2独家)
所以最后的日期不包括在内,因为它与示例相关:
LocalDate from = LocalDate.now();
LocalDate to = from.plusDays(1);
ChronoUnit.DAYS.between(from, to); // Result is 1
Run Code Online (Sandbox Code Playgroud)
是否还有其他功能可以在该表达式中获得2天?
否则我只看到我能做到如下:
LocalDate from = LocalDate.now();
LocalDate to = from.plusDays(1);
ChronoUnit.DAYS.between(from, to.plusDays(1)); // Result is 2
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以对field1 = x和field2 = y的Firestore文档执行删除操作?
我看到了删除功能,但没有附带。如果使用事务,则存在get和delete,但get似乎不接受“ where”子句。
我希望我在文档中缺少一些内容。
谢谢
我正在开发一款使用Firebase身份验证通过电话号码登录用户的应用.我想添加一个功能,只有一次登录用户,即使用户杀死应用程序并再次启动它,他应该登录.另外,我不想添加注销功能.可以做些什么呢?
这是我用于测试聊天应用程序的当前Firebase/Firestore数据模型。但是,这种模型很难用于 Android 端的推送通知。当用户从他们所属的任何渠道收到消息时,我想向用户手机发送推送通知。此外,需要添加文件/图像消息。
我可以用作参考的聊天应用程序的任何建议或任何良好数据模型的示例。

NoSQL Firestore 没有表,标记的最佳方法是什么,只需将多个标记存储在一个数组中?
我正在尝试从 Android 中的 Firebase 获取用户列表。
我已经有了用户的 uuid,并使用它来尝试获取整个对象。uuid 既是节点名称又是用户节点内的字段(当然是相同的)。
这是我的代码:
DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference("users");
Query query = usersRef.orderByChild("uuid").equalTo(animalMarker.getUserUid());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.d(TAG, "onDataChange: xxxxxxxx---- entered onDataChange");
// go to node "users/userUID" , becuase dataSnapshot is parent node
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Log.d(TAG, "xxxxxxxx---- onDataChange: ds= " + ds);
User user = ds.getValue(User.class);
Log.d(TAG, "xxxxxxxx---- onDataChange: user=" + user);
// createdByTV.setText("Created by \n" + user.getEmail());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) …Run Code Online (Sandbox Code Playgroud)