Viewmodel + Asynctask en Android usando Jetpack

11:25 0 Comments

Ejemplo de Viewmodel en Android usando el framework Jetpack de Google Android

Dependencias

Insertar la siguiente linea en archivo app.gradle
implementation 'android.arch.lifecycle:extensions:1.1.1'

Implementación

Crear un AndroidVieMmodel por ejemplo PackageViewModel.java
public class PackageViewModel extends AndroidViewModel {

    private final String TAG = PackageViewModel.class.getSimpleName();

    private YouAsynctask mAsyncTask;

    private MutableLiveData<List<ApplicationInfo>> mPackagesAll;

    public PackageViewModel(@NonNull Application application) {
        super(application);
    }

    LiveData<List<ApplicationInfo>> getAllPackages() {
        if (mPackagesAll == null) {
            mPackagesAll = new MutableLiveData<>();
            loadData();
        }
        return mPackagesAll;
    }

    private void loadData() {
        mAsyncTask = new YouAsynctask();
        mAsyncTask.execute();
    }

    public class YouAsynctask extends AsyncTask<Void, Float, Boolean> {

        @Override
        protected Boolean doInBackground(Void... voids) {

            final PackageManager pm = getApplication().getPackageManager(); //get a list of installed apps.
            List<ApplicationInfo> packagesAll = pm.getInstalledApplications(PackageManager.GET_META_DATA);
            mPackagesAll.postValue(packagesAll);

            return null;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);
        }
    }
}

Su uso

En la actividad donde queremos usar el viewmodel
private PackageViewModel packageViewModel;
 ...
packageViewModel = ViewModelProviders.of(this).get(PackageViewModel.class);

packageViewModel.getAllPackages().observe(this, new Observer<List<ApplicationInfo>>() {
    @Override
    public void onChanged(List<ApplicationInfo> applicationInfos) {
        Log.d(TAG, "onChanged: " + applicationInfos.size());
    }
});
Ejemplo muy básico de usar un viewmodel

webserveis

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.

0 comentarios: