无法读取或写入 firebase 实时数据库(android studio)
Posted
技术标签:
【中文标题】无法读取或写入 firebase 实时数据库(android studio)【英文标题】:Can't read or write to the firebase realtime database (android studio) 【发布时间】:2020-09-11 17:58:34 【问题描述】:我想我连接到了火力基地,因为我收到了终端的消息
I/FirebaseInitProvider: FirebaseApp initialization successful
而且我认为我设置的规则是正确的
"rules":
".read": true,
".write": true
这是我的读写代码。
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
@Override
protected void onStart()
super.onStart();
// Read from the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
// This method is called once with the initial value and again
// whenever data at this location is updated.
String value = dataSnapshot.getValue(String.class);
System.out.println(value);
Log.d("T", "Value is: " + value);
@Override
public void onCancelled(DatabaseError error)
// Failed to read value
Log.w("F", "Failed to read value.", error.toException());
);
还有一件很奇怪的事情,它可以打印值,但数据永远不会在控制台中更新。
打印值
I/System.out: Hello, World!
D/T: Value is: Hello, World!
但在控制台中...
【问题讨论】:
数据永远不会更新是什么意思?您在控制台中没有看到任何内容? 是的,在控制台中... 【参考方案1】:您必须推送消息,以免它们每次都更新:
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
//use a map
Map<String, String> message = new HashMap<>();
message.put("text", "Hello, World!");
myRef.push().setValue(message);
在此之后,您的消息将如下所示:
message
|
|----------randomID
|-----text : "Hello, World!"
|
|
阅读消息文本:
@Override
protected void onStart()
super.onStart();
// Read from the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
for (DataSnapshot ds: dataSnapshot.getChildren())
//this loops through all random ids and grabs the text
//you can maybe store the text in some list and do whatever.
String value = ds.child("text").getValue(String.class);
System.out.println(value);
Log.d("T", "Value is: " + value);
@Override
public void onCancelled(DatabaseError error)
// Failed to read value
Log.w("F", "Failed to read value.", error.toException());
);
【讨论】:
对不起,我试过了,但没用......这次我连打印的消息都找不到了,控制台也没有任何变化。 你刷新控制台页面了吗? 一个键(消息)和一个值(无)。如上图所示 你完全按照我说的去做了吗?除了我告诉你的以外,你有没有打电话给其他的东西?您是否删除了旧代码? 是的,我只是复制粘贴了你的代码,没有调用其他的东西,把旧代码全部删除了。【参考方案2】: tableUser.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
tv.setText(dataSnapshot.getValue().toString());
Log.e(TAG, "onDataChange: " + dataSnapshot.getValue().toString());
Toast.makeText(MainActivity.this, "" + dataSnapshot, Toast.LENGTH_SHORT).show();
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
【讨论】:
DatabaseReference tableUser = FirebaseDatabase.getInstance().getReference().child("message"); tv = findViewById(R.id.tv); //使用地图 Map是的,我也遇到了这个问题。我通过 IntelliJ 上的工具连接到 firebase,我可以 Logcat firebaseProjectID,这意味着它已经连接到 firebase。所以我创建了一个新项目并从旧项目中复制所有代码,通过工具连接到firebase,它可以正常使用读写数据库而无需接触任何代码。这是一个非常烦人的解决方案,但比尝试在互联网上找到解决方案更容易,我仍然无法找到它们。
【讨论】:
以上是关于无法读取或写入 firebase 实时数据库(android studio)的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Swift 4 将数据写入 Firebase 实时数据库
从 Firebase 中的实时数据库获取数据后,无法写入 Unity 的 TMPro 文本字段