Я пытаюсь обновить данные в базе данных Firebase Realtime через приложение для Android. Он будет работать только изредка после того, как я открою приложение и подожду некоторое время. Большую часть времени это не работает. В моем случае, работающие средства означают, что данные обновляются в облаке. Мне интересно, почему это иногда работает, а иногда не работает. В Logcat нет ошибок или предупреждений. Как только он заработает, он продолжит работать, пока приложение не будет перезапущено.
Класс DbHelper
public class DbHelper {
static final String TAG = "ttt";
int count = 0;
private static FirebaseDatabase database = FirebaseDatabase.getInstance();
private static DatabaseReference myRef = database.getReference("message");
TextView tv;
public DbHelper(final TextView tv){
this.tv = tv;
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String text = dataSnapshot.getValue(String.class);
tv.setText(text);
Log.d(TAG, "Value is: " + text);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "Failed to read value.", databaseError.toException());
}
});
}
public void testing(){
myRef.setValue("test"+count++);
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
TextView textTesting;
DbHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
textTesting = (TextView)findViewById(R.id.text_testing);
dbHelper = new DbHelper(textTesting);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbHelper.testing();
}
});
}
}
Добавлена
DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
Log.d(TAG, "connected");
} else {
Log.d(TAG, "not connected");
}
}
@Override
public void onCancelled(DatabaseError error) {
System.err.println("Listener was cancelled");
}
});
Logcat
11-14 20: 26: 58,956 19329-19384 /? V / FA: попытка подключения уже выполняется
11-14 20: 26: 58,956 19329-19384 /? V / FA: попытка подключения уже выполняется
11-14 20: 26: 58,961 19329-19384 /? V / FA: деятельность возобновлена, время: 167270724
11-14 20: 26: 58,986 19329-19384 /? D / FA: подключен к удаленному сервису
11-14 20: 26: 59.001 19329-19329 /? I / Хронология: Хронология: Идентификатор Activity_idle: android.os.BinderProxy@34fb88b7 время: 15941479
11-14 20: 26: 59,006 19329-19384 /? V / FA: Обработка поставленных в очередь сервисных задач: 4
11-14 20: 26: 59,056 19329-19336 /? I / art: игнорирование второго отладчика - принятие и удаление
11-14 20: 26: 59,541 19329-19329 /? D / ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-14 20: 26: 59,631 19329-19329 /? D / ttt: значение равно: test0
11-14 20: 27: 02.366 19329-19329 /? D / ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
11-14 20: 27: 02.451 19329-19329 /? D / ttt: значение: test1
11-14 20: 27: 04.166 19329-19384 /? V / FA: бездействие, отключение от услуги
11-14 20: 28: 07.721 19329-19329 /? D / FA: сервисное соединение приостановлено