我正在尝试从我的 firebase 数据库中获取单个字符串。虽然我没有看到任何错误,但是当我更改数据时,它没有反射(reflect)出来。我只想在 firebase 中在线存储一个字符串,然后再检索它。 我正在为一个安卓应用程序做这个。这是 MainActivity 的代码。请告诉我哪里出错了。
package sadboy.firebase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
[public class MainActivity extends AppCompatActivity {][1]
private TextView title;
private DatabaseReference mFirebaseDatabase;
private FirebaseDatabase mFirebaseInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
title = (TextView)findViewById(R.id.title);
mFirebaseInstance = FirebaseDatabase.getInstance();
mFirebaseDatabase = mFirebaseInstance.getReference("hey");
mFirebaseInstance.getReference("new_title").setValue("Realtime Database");
mFirebaseInstance.getReference("new_title").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String appTitle = dataSnapshot.getValue(String.class);
Log.e("Hey", appTitle);
title.setText(appTitle);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e("Hey", "Failed to read app title value.", error.toException());
}
});
}
}
最佳答案
尝试使用这种方法:
public class MainActivity extends AppCompatActivity {
private TextView title;
private DatabaseReference mFirebaseDatabase;
private FirebaseDatabase mFirebaseInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
title = (TextView) findViewById(R.id.title);
mFirebaseInstance = FirebaseDatabase.getInstance();
mFirebaseDatabase = mFirebaseInstance.getReference();
mFirebaseDatabase.child("new_title").setValue("Realtime Database");
mFirebaseDatabase.child("new_title").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String appTitle = dataSnapshot.getValue().toString();
Log.e("Hey", appTitle);
title.setText(appTitle);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e("Hey", "Failed to read app title value.", error.toException());
}
});
}
}
编辑
为了更容易测试代码,我对您的布局做了细微的更改。以下是我所做的更改:
activity_main.xml
我添加了一个 EditText 和 Button。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="sadboy.firebase.MainActivity">
<EditText
android:id="@+id/et_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:inputType="text" />
<Button
android:id="@+id/bt_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:text="SEND" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
单击“发送”按钮后,我从 EditText 中取出字符串并将其作为 new_title
值存储在您的 Firebase 数据库中,同时收听在 new_title
中所做的更改并显示TextView 的值。
public class MainActivity extends AppCompatActivity {
private TextView title;
private EditText etInput;
private Button btSend;
private DatabaseReference mFirebaseDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
title = (TextView) findViewById(R.id.title);
etInput = (EditText) findViewById(R.id.et_input);
btSend = (Button) findViewById(R.id.bt_send);
mFirebaseDatabase = FirebaseDatabase.getInstance().getReference();
btSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String valuetoSend = etInput.getText().toString();
mFirebaseDatabase.child("new_title").setValue(valuetoSend);
}
});
mFirebaseDatabase.child("new_title").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String appTitle = dataSnapshot.getValue().toString();
title.setText(appTitle);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e("Hey", "Failed to read app title value.", error.toException());
}
});
}
}
结果如下:
关于android - 如何获取 firebase 数据库的实时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42050057/