我在 Firestore 数据库中有一个包含他们名字的用户列表。我想要实现的是让用户能够搜索和找到其他用户。我的问题是:
Query query = db.collection("users").whereEqualTo("name", searchTerm);
FirestoreRecyclerOptions<UserObject> response = new FirestoreRecyclerOptions.Builder<UserObject>()
.setQuery(query, UserObject.class)
.build();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,只有当我完全正确地写出他们的名字和姓氏时,我才能找到用户。但我想要的是获得名称或姓氏相似的用户。而且,用户的姓氏和名字存储在一个字符串变量中。就像在 facebook 中一样,如果你搜索一些名字,它也会显示相似的名字。有没有用 firestore 实现这一目标的好方法?
我有大问题。使用 Android Emulator 运行该应用程序效果很好,但是当我将该应用程序放在真实手机上时,出现此错误:
java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type java.lang.Long to boolean (found in field 'imp')
Run Code Online (Sandbox Code Playgroud)
我的 Firebase 数据没问题,'imp' 字段是数据库中的一个布尔值,所以我从数据库中检索一个布尔值并将其存储在一个布尔变量中。当数据作为布尔值从 Firebase 发送时,我怎么能说我收到了 Long?
为什么只有真手机才会出现这种情况?
现在我真的不明白为什么在 Android Emulator 中工作正常并且在真实手机中安装应用程序会给我这个错误。
这是我处理数据的适配器:
public class modelNoutati {
String name;
String cont;
Date data;
Boolean imp;
public modelNoutati(){ }
public modelNoutati(String cont, Date data, Boolean imp, String name) {
this.name = name;
this.cont = cont;
this.data = data;
this.imp = imp;
}
public String getName() {return name;}
public …Run Code Online (Sandbox Code Playgroud) 我很困惑在哪里放置@Exclude我不想在我的Cloud Firestore数据库中的字段的注释.
仅仅将它放在getter方法上就足够了吗?它还有什么作用将它添加到setter方法或变量声明?
在我的示例中,我不想存储文档ID,因为这将是多余的:
public void loadNotes(View v) {
notebookRef.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
String data = "";
for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
Note note = documentSnapshot.toObject(Note.class);
note.setDocumentId(documentSnapshot.getId());
String title = note.getTitle();
String description = note.getDescription();
data += "\nTitle: " + title + "Description: " + description;
}
textViewData.setText(data);
}
});
}
Run Code Online (Sandbox Code Playgroud)
型号类:
public class Note {
private String documentId;
private String title;
private String description;
public Note() {
//public no arg …Run Code Online (Sandbox Code Playgroud) 我正在尝试ArrayList从文档中获取包含所有字段名称的文件并将其转换为ArrayList.
我已经能够从一个集合中做到这一点,我将所有文档都放在一个集合中,ArrayList但我不能从一个文档中做到这一点。
下面是所有文档的代码和数据库的图像以及我想要的。
names_clinics= new ArrayList<>();
mFirebaseFirestore = FirebaseFirestore.getInstance();
mFirebaseFirestore.collection("CodeClinic")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
names_clinics.add(document.getId());
Log.d("CLINIC CODE", document.getId() + " => " + document.getData());
}
} else {
Log.d("CLINIC CODE", "Error getting documents: ", task.getException());
}
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢:D
我有一棵Firestore收集树,我打算在其中仅存储一个文档。我想检查该集合是否包含该文档,如果包含,请检索该文档的ID!有什么想法/想法吗?
谢谢 :)
有没有办法在 Firebase Firestore 集合中获取上次创建的文档?我的要求是当用户签名时,我必须在名为“history”的集合中添加一个文档;当用户退出时,我想使用名为“退出”的字段更新该文档;因此,如果我获得最后添加的文档,则很容易更新。有没有办法做到这一点?
我想获取父键值,其中“drinkManufacturerID”等于 currentUsers UID。但是,我不知道 theVenueID或 the的值PushID(见下文)。在不知道这些值的情况下,如何检查“drinkManufacturerID”的值是否相等。是否可以不重组我的数据库?
相关代码:
public class DealRawDataActivity extends AppCompatActivity {
DatabaseReference databaseDrinks;
DatabaseReference databaseManufacturer;
String keys;
FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deal_raw_data);
databaseDrinks = FirebaseDatabase.getInstance().getReference("drinks").child("-LWLuM2nesg0uaP0dLSn"); //However, this string will not be know! How to get this string value?
//To later be used in listView
databaseDrinks.orderByChild("drinkManufacturerID").equalTo(currentFirebaseUser.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
keys = datas.getKey();
}
Toast.makeText(getApplicationContext(), keys, Toast.LENGTH_LONG).show(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个新文档,其中没有任何数据(任何字段)。但我找不到办法。
我想让新用户在决定使用 Gmail、Facebook 或电子邮件和密码登录之前可以看到我的应用程序中的一些内容。所以首先我需要让他们在使用此代码安装应用程序时匿名登录
auth.signInAnonymously()
Run Code Online (Sandbox Code Playgroud)
然后,在他们尝试之后,他们决定使用 Google 帐户登录,然后我将具有特定 UID(假设 UID 是 q1q2q3)的用户转换为使用此代码使用 Google 作为身份验证提供程序。
auth.currentUser!!.linkWithCredential(credential)
Run Code Online (Sandbox Code Playgroud)
然后假设他们卸载并重新安装该应用程序。因此他们将再次匿名登录,并且作为匿名用户将获得不同的 UID(假设新的 UID 是 aXXXX12345b ),即使他们再次使用 Google 登录,他们也会以 q1q2q3 身份登录
所以现在我有一个多余的匿名用户(aXXXX12345b)。像这样有多余的匿名身份验证用户可以吗?我的意思是,我担心我会遇到 firebase 身份验证的限制。我应该怎么办 ?对于这样的情况有更好的方法吗?我不知道这是否是一种常见做法
我想使用 Google 帐户登录我的应用程序。我使用 Firebase 对用户进行身份验证。
我已经阅读了该文档一百万遍。我已将 SH1 调试密钥作为指纹添加到 Firebase 项目中,并使用Web SDK configurationFirebase 作为 Web 客户端 ID:

我已经在 strings.xml 文件中设置了它
<string name="web_client_id">**HERE**</string>
我的其余代码如下所示:
public class AuthFragment extends Fragment {
private FragmentAuthBinding binding;
private SignInClient oneTapClient;
ActivityResultLauncher<Intent> oneTapLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
try {
var credential = oneTapClient.getSignInCredentialFromIntent(data);
String idToken = credential.getGoogleIdToken();
} catch (ApiException e) {
throw new RuntimeException(e);
}
}
});
public AuthFragment() {}
@Override
public View …Run Code Online (Sandbox Code Playgroud) java android firebase google-cloud-platform firebase-authentication