java 存储库模式的Android Repository类示例。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 存储库模式的Android Repository类示例。相关的知识,希望对你有一定的参考价值。

package com.dev.data.source;

import com.dev.data.models.User;
import com.dev.data.source.local.UserLocalDataSource;
import com.dev.data.source.network.UserNetworkDataSource;

import okhttp3.ResponseBody;

/**
 * Concrete implementation to load Users from the data sources into a cache.
 */
public class UserRepository implements UserDataSource {

    private UserLocalDataSource userLocalDataSource;

    private UserNetworkDataSource userNetworkDataSource;

    private static UserRepository mInstance;

    private UserRepository() {
        userNetworkDataSource = UserNetworkDataSource.getInstance();
        userLocalDataSource = new UserLocalDataSource();
    }

    public static UserRepository getInstance() {
        if (mInstance == null)
            mInstance = new UserRepository();
        return mInstance;
    }

    @Override
    public void getUser(GetUserCallback callback) {
        userLocalDataSource.getUser(new GetUserCallback() {
            @Override
            public void onUserLoaded(User user) {
                callback.onUserLoaded(user);
            }

            @Override
            public void onDataNotAvailable(Throwable err) {
                if (err.getMessage().equals("Data is null")) {
                    userNetworkDataSource.getUser(new GetUserCallback() {

                        @Override
                        public void onUserLoaded(User user) {
                            callback.onUserLoaded(user);
                            userLocalDataSource.saveUser(user);
                        }

                        @Override
                        public void onDataNotAvailable(Throwable err) {
                            callback.onDataNotAvailable(err);
                        }
                    });
                }
            }
        });
    }

    @Override
    public void saveUser(User user) {
        userLocalDataSource.saveUser(user);
    }

    @Override
    public void updateUser(User user, GetUserCallback callback) {
        userNetworkDataSource.updateUser(user, new GetUserCallback() {
            @Override
            public void onUserLoaded(User user) {
                userLocalDataSource.updateUser(user, new GetUserCallback() {
                    @Override
                    public void onUserLoaded(User user) {
                        callback.onUserLoaded(user);
                    }

                    @Override
                    public void onDataNotAvailable(Throwable err) {
                        callback.onDataNotAvailable(err);
                    }
                });
            }

            @Override
            public void onDataNotAvailable(Throwable err) {
                callback.onDataNotAvailable(err);
            }
        });
    }

    @Override
    public long getId() {
        return userLocalDataSource.getId();
    }

    @Override
    public void setId(long id) {
        userLocalDataSource.getUser(new GetUserCallback() {
            @Override
            public void onUserLoaded(User user) {
                user.setId(id);

                userNetworkDataSource.updateUser(user, new GetUserCallback() {
                    @Override
                    public void onUserLoaded(User user) {
                        userLocalDataSource.setId(id);
                    }

                    @Override
                    public void onDataNotAvailable(Throwable err) {

                    }
                });
            }

            @Override
            public void onDataNotAvailable(Throwable err) {

            }
        });
    }
}

以上是关于java 存储库模式的Android Repository类示例。的主要内容,如果未能解决你的问题,请参考以下文章

java 存储库模式的Android Repository类示例。

markdown Android中MVP中的存储库模式

Docker如何更改存储库名称或重命名图像?

使用 maven 存储库将 java 库添加到 Android Studio 项目

java 存储库patern的Android DataSource类示例。

java 存储库模式