Мой ListView не показывает элементы, даже если у адаптера массива есть значения - PullRequest
0 голосов
/ 12 октября 2019

У меня есть приложение, которое показывает данные в виде списка из базы данных 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
            }
        });}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...