Как постоянно обновлять объект liveata из сервиса с viewmodel в MVVM? - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь постоянно обновлять пользовательский интерфейс в зависимости от длительных выходных данных службы. По сути, я хочу отображать и добавлять список пользователей по одному после того, как они будут обработаны связанной службой.

MainActivityViewModel

public class MainActivityViewModel extends ViewModel {

    private MutableLiveData<User> user = new MutableLiveData<>();

    private MutableLiveData<MyService.MyBinder> mBinder = new MutableLiveData<>();
    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className, IBinder iBinder) {
            MyService.MyBinder binder = (MyService.MyBinder) iBinder;
            mBinder.postValue(binder);
        }

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            mBinder.postValue(null);
        }
    };


    public ServiceConnection getServiceConnection(){
        return serviceConnection;
    }

    public LiveData<User> getUser(){
        return user;
    }

    public LiveData<MyService.MyBinder> getBinder(){
        return mBinder;
    }
}

Мой сервис

public class MyService extends Service {

    private final IBinder mBinder = new MyBinder(); 
    private Handler mHandler;

    @Override
    public void onCreate() {
        super.onCreate();
        mHandler = new Handler();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    public void starFetchingUsers(User obj){
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
 /**********************************************************/ 

Здесь я буду отправлять POST метод один за другим 100 раз и получу ответ как пользовательский объект, который должен быть liveData. Так что когда-то этот объект изменяется после следующего метода публикации, я хочу, чтобы он отображался или добавлялся в пользовательский интерфейс.

Как связать эту переменную объекта динамического пользователя с пользователем MutableLiveData, созданным в классе MainActivityViewModel? так что это автоматически обновляется в пользовательском интерфейсе.

/**********************************************************/
            }
        });

        thread.start();

    }
    public class MyBinder extends Binder{

        MyService getService(){
            return MyService.this;
        }

    }
    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        stopSelf();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

Пожалуйста, дайте мне знать, что мне не хватает в обоих классах.

...