Android 从firebase数据库中获取数据:它似乎仅toast,但未保存在firebase数据库中
您好,我正在开发一个应用程序,以便在我实现应用程序时将联系人提取到我的应用程序中,我正在接收该应用程序以toast所有联系人,但联系人不会进入Firebase数据库。我试了很多次,但还是不能储存在firebase中。为了检查它,我试着去烤面包,它得到了所有的列表,但没有存储。 下面是代码Android 从firebase数据库中获取数据:它似乎仅toast,但未保存在firebase数据库中,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,您好,我正在开发一个应用程序,以便在我实现应用程序时将联系人提取到我的应用程序中,我正在接收该应用程序以toast所有联系人,但联系人不会进入Firebase数据库。我试了很多次,但还是不能储存在firebase中。为了检查它,我试着去烤面包,它得到了所有的列表,但没有存储。 下面是代码 public ProgressDialog dialog; public DatabaseReference db; @Override protected void onCreate(Bundle
public ProgressDialog dialog;
public DatabaseReference db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FirebaseApp.initializeApp(this);
db = FirebaseDatabase.getInstance().getReference().child("contact-fetch-firebase");
setContentView(R.layout.activity_main);
dialog = new ProgressDialog(this);
dialog.setMessage("Uploading contacts...");
Cursor contacts = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
},
null,
null,
null
);
HashMap<String,Object> map = new HashMap<>();
if(contacts!=null) {
while(contacts.moveToNext()){
map.put(
contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)),
contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
);
}
contacts.close();
}
dialog.show();
Iterator i = map.keySet().iterator();
while(i.hasNext()) {
String key=(String)i.next();
Object value=(Object) map.get(key);
Toast.makeText(getBaseContext(), "Name: " + key + " Contact Number: " + value, Toast.LENGTH_LONG).show();
}
db.updateChildren(map)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
String key = db.child("user").push().getKey();
String value = db.child("key").push().getKey();
dialog.dismiss();
Toast.makeText(MainActivity.this, "Contacts uploaded successfully!", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
dialog.dismiss();
Log.w("MKN","Error: "+e.getMessage());
Toast.makeText(MainActivity.this, "Contacts upload failed.", Toast.LENGTH_SHORT).show();
}
});
}
}
公共进程对话框;
公共数据库参考数据库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FirebaseApp.initializeApp(本);
db=FirebaseDatabase.getInstance().getReference().child(“联系获取firebase”);
setContentView(R.layout.activity_main);
dialog=新建ProgressDialog(此);
设置消息(“上传联系人…”);
游标联系人=getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,新字符串[]{
Contacts contract.CommonDataTypes.Phone.DISPLAY\u NAME,
Contacts contract.CommonDataTypes.Phone.NUMBER
},
无效的
无效的
无效的
);
HashMap=newHashMap();
如果(联系人!=null){
while(contacts.moveToNext()){
地图放置(
contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME)),
contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER))
);
}
contacts.close();
}
dialog.show();
迭代器i=map.keySet().Iterator();
while(i.hasNext()){
字符串键=(字符串)i.next();
对象值=(对象)map.get(键);
Toast.makeText(getBaseContext(),“Name:+key+”联系人号码:“+value,Toast.LENGTH_LONG).show();
}
db.updateChildren(地图)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
String key=db.child(“用户”).push().getKey();
字符串值=db.child(“key”).push().getKey();
dialog.dismise();
Toast.makeText(MainActivity.this,“联系人已成功上载!”,Toast.LENGTH_SHORT.show();
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
dialog.dismise();
Log.w(“MKN”,“Error:+e.getMessage());
Toast.makeText(MainActivity.this,“联系人上载失败”,Toast.LENGTH_SHORT.show();
}
});
}
}
试试这种方法-
Iterator i = map.keySet().iterator();
while(i.hasNext()) {
String key=(String)i.next();
Object value=(Object) map.get(key);
db.updateChildren(map)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
String key = db.child("user").push().getKey();
String value = db.child("key").push().getKey();
dialog.dismiss();
Toast.makeText(MainActivity.this, "Contacts uploaded successfully!", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w("MKN","Error: "+e.getException());
}
});
}
Iterator i=map.keySet().Iterator();
while(i.hasNext()){
字符串键=(字符串)i.next();
对象值=(对象)map.get(键);
db.updateChildren(地图)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
String key=db.child(“用户”).push().getKey();
字符串值=db.child(“key”).push().getKey();
dialog.dismise();
Toast.makeText(MainActivity.this,“联系人已成功上载!”,Toast.LENGTH_SHORT.show();
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.w(“MKN”,“Error:+e.getException());
}
});
}
首先要考虑的是更改数据库的身份验证规则,
以下规则仅允许经过身份验证的用户读取或写入数据
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
下面的规则允许每个人在没有身份验证的情况下读写数据
{
"rules": {
".read": true,
".write": true
}
}
“联系人上传成功!”吐司显示?是否“联系人上传成功!”吐司显示?--NOso是否显示失败?是的,它显示“联系人上载失败”测试您是否检查了失败引发的异常??它显示上载联系人以及从firebase控制台加载很长时间后显示结构contact fetch firebase-users user:-“user”此日志打印什么-Log.w(“MKN”,“Error:+e.getException())); (在onFailure()方法中)。我不知道确切地说我在stackoverflow post中使用了它somewhere@Yash你怎么不知道Log.w
做什么?它基本上会向设备的logcat记录警告。这可以通过点击Android Studio底部的“Logcat”选项卡来阅读。(P.S.考虑阅读代码和/或文档来查看某个特定函数所做的事情)。我已经改变了它,使它应用了“{规则”:{“.Read”):true,“写”:true }尝试检查文档中给出的所有步骤: