zoukankan      html  css  js  c++  java
  • Android获取全局Context的方法

    Android获取全局Context的方法

    Android--应用全局获取Context - 超宇的博客 - CSDN博客
    https://blog.csdn.net/chaoyu168/article/details/64444274

    如何构建Android MVVM 应用框架 -
    https://tech.meituan.com/android_mvvm.html
    看这篇文章说的还是需要每个ViewModel需要持了一个Context的引用
    但应该可以做个ViewModel内都可以使用的,不用每个方法都传入那么麻烦

    使用mvvm框架可以参考下面的实现方式,得改几个地方比较繁琐

    =====================
    实例:
    AppComponent增加 FavoritesDBManager FavoritesDBManager();
    @Singleton
    @Component(modules = AppModule.class)
    public interface AppComponent {
    SharedPreferences sharedPreferences();
    Context context();
    FavoritesDBManager FavoritesDBManager();
    }
    ---------------------
    CoinListComponent增加注解:dependencies = AppComponent.class
    @FragmentScope
    @Component(modules = CoinListModule.class, dependencies = AppComponent.class)
    public interface CoinListComponent {
    ----------------
    全局AppModule增加provideFavoritesDBManager
    @Module
    public class AppModule {
    private Context context;

    public AppModule(Context context) {
    this.context = context;
    }

    @Provides
    @Singleton
    FavoritesDBManager provideFavoritesDBManager() {
    return new FavoritesDBManager(context);
    }
    ----------------
    CoinListViewModel 增加@Inject FavoritesDBManager mFavoritesDBManager;
    用到的的地方直接调用

    public class CoinListViewModel extends BaseViewModel implements CoinlistItemClickLisnter {

    @Inject
    FavoritesDBManager mFavoritesDBManager;

    if(status == 0) {
    List<Favorites> listData = mFavoritesDBManager.getFavoritesListData();
    }
    =====================
    java.lang.IllegalStateException: com.aax.exchange.inject.AppComponent must be set
    at com.aax.exchange.inject.component.DaggerCoinListComponent$Builder.build(DaggerCoinListComponent.java:75)
    at com.aax.exchange.fragment.CoinListFragment.inject(CoinListFragment.java:56)
    at com.aax.exchange.base.BaseMvvmFragment.onCreateView(BaseMvvmFragment.java:54)
    ---------------------
    用到的地方CoinSearchActivity,CoinListFragment都要加上.appComponent(ComponentHolder.getComponent())
    --------------
    @Override
    protected void inject() {
    CoinSearchComponent component = DaggerCoinSearchComponent.builder()
    .coinSearchModule(new CoinSearchModule(this)).appComponent(ComponentHolder.getComponent())
    .build();
    @Override
    protected void inject() {

    CoinListComponent component = DaggerCoinListComponent.
    builder().coinListModule(new CoinListModule(this)).appComponent(ComponentHolder.getComponent())
    .build();
    ------------------
    public class ComponentHolder {
    private static AppComponent mComponent;
    public static AppComponent getComponent() {
    return mComponent;
    }
    public static void setComponent(AppComponent component) {
    mComponent = component;
    }
    }
    =====================
    subscribe(fragment.mAct,Api.getApiService().getFavorites(new ObserverResponseListener<Object>() {
    @Override
    public void onNext(Object o) {
    ToastUtil.showLongToast("get favorites ");
    String tradingPair = data.getQuote() + data.getBase();
    Favorites fav = new Favorites();
    fav.setTradingPair(tradingPair);
    mFavoritesDBManager.addFavoritesData(fav);
    }
    @Override
    public void onError(Throwable e) {
    ToastUtil.showLongToast("get favorites error");
    }
    }, fragment.bindToLifecycle(),false,false);

  • 相关阅读:
    Android_listview设置每条信息的间距
    Android实现ListView或GridView首行/尾行距离屏幕边缘距离
    实现类似微信的延迟加载的Fragment——LazyFragment
    struts2的Action该方法不能去
    (工具)source insight高速增加时间代码
    猫学习IOS(十五)UI以前的热的打砖块游戏
    java语言内部类和匿名内部类
    JVM截至多少线程可以创建: unable to create new native thread
    linux下一个Oracle11g RAC建立(八)
    转基因小麦--主题在农业科技的最前沿
  • 原文地址:https://www.cnblogs.com/zdz8207/p/Android-context-MVVM.html
Copyright © 2011-2022 走看看