У меня есть приложение, которое показывает данные в виде списка из базы данных Firebase. В основной деятельности все работало нормально, но затем я переместил свой код в класс фонового обслуживания, чтобы получать уведомления об изменении моих данных. Но теперь все в порядке, мой адаптер массива также получает данные из firebase, но просмотр списка все еще пуст и не показывает никаких данных. Я не понимаю, в чем проблема
Я попробовал тосты на ArrayList и адаптере массива, и у меня есть данные. Но представление списка пусто.
// My MainActivity просто запускает службу, как
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(MainActivity.this, MyServiceClass.class);
startService(intent);
}
// Мой класс обслуживания
public class MyFirebaseMessagingService extends Service {
private Timer mTimer;
private Handler mHandler = new Handler();
private static final int TIMER_INTERVAL = 2000; // 2 Minute
private static final int TIMER_DELAY = 0;
///////////////////
ListView listView;
ArrayList<String> arrayList;
ArrayAdapter arrayAdapter;
FirebaseDatabase mDatabase;
DatabaseReference mRef;
private ValueEventListener valueEventListener;
View v;
/////////////////////
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
////////////////////////////
mDatabase = FirebaseDatabase.getInstance();
mRef = mDatabase.getReference("Class Info");
v = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
arrayList = new ArrayList<>();
arrayList.add("Hei");
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Toast.makeText(getApplicationContext(), "heheh i m running", Toast.LENGTH_SHORT).show();
String data = (String) snapshot.getValue();
arrayList.add(data);
}
listView = v.findViewById(R.id.listview);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
////////////////////////////////////
if (mTimer != null)
mTimer = null;
// Create new Timer
mTimer = new Timer();
mTimer.scheduleAtFixedRate(new DisplayToastTimerTask(), TIMER_DELAY,
TIMER_INTERVAL);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mRef.addValueEventListener(valueEventListener);
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
// Cancel timer
mTimer.cancel();
mRef.removeEventListener(valueEventListener);
Toast.makeText(MyFirebaseMessagingService.this, "service destroyed",
Toast.LENGTH_SHORT).show();
}
// Required to do some task like displaying toast after a specific time
private class DisplayToastTimerTask extends TimerTask {
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
// here you can do something after an interval of time
}
});}}}