使用dagger在Android mvp上实现GoogleApiClient?

Sha*_*edi 10 mvp android dependency-injection dagger-2 android-6.0-marshmallow

我有几个问题,

首先,当我阅读一些文章时,我应该在活动中实现LocationListener,ConnectionCallback,OnConnectionFailedListener接口,

在不同的文件中分离这些类的实现是否正确?

喜欢下面?

public class LocationListener implements 
           com.google.android.gms.location.LocationListener {
@Inject
Location mLastLocation;
@Override
public void onLocationChanged(Location location) {
    // Assign the new location
    mLastLocation = location;
    // Displaying the new location on UI
 }
}
Run Code Online (Sandbox Code Playgroud)

我处理的活动是否正确显示mLastLocation属性?

//Fields
@Inject
GoogleApiClient client;
Location mLastLocation;
//Fields
  mLastLocation = LocationServices.FusedLocationApi.getLastLocation(client);
Run Code Online (Sandbox Code Playgroud)

第二,我该如何为它编写提供者方法?,我的猜测会是这样的,你们会推荐什么?

//Constructor
public LocationModule(Context context, GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
    this.context = context;
    this.callback = callback;
    this.listener = listener;
}
@Provides
@Singleton
GoogleApiClient providesGoogleApi() {
    return new GoogleApiClient.Builder(context)
            .addOnConnectionFailedListener(listener)
            .addConnectionCallbacks(callback)
            .addApi(LocationServices.API)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

最后,我应该在哪里处理Android 6及以上设备的权限?,是在视图上还是在演示者身上?

我听说View必须是如此愚蠢以至于你不需要测试它,我应该如何保持这个原则?

如果有人可以给我一个参考,或github示例代码,这与我的案例相匹配,那将是如此之大.

Moh*_*ini 5

最后一件事首先,你能想到的MVP视图层为纯Android的模块,这意味着随着Android操作系统,如请求许可的,必须办理了使用该层,并将结果返回到决定下一步怎么做演示的任何通信.

关于分离这些类的实现,当我在寻找一些类的代码时,我自己喜欢将类分开以获得更清晰的可视化!我认为任何人都不能建议最佳实践,因为这取决于您的模块和实施.根据清洁代码书,在这种类型的决策制定情况下,您必须更多地考虑您的代码可读性.

最后,关于LocationModule,它是完全正确的,但如果我在你的鞋子里,我甚至会在更高级别的Component(例如ApplicationComponent)中请求Context并从LocationModule构造函数中删除它.

//Constructor
public LocationModule(GoogleApiClient.ConnectionCallbacks callback, GoogleApiClient.OnConnectionFailedListener listener) {
    this.callback = callback;
    this.listener = listener;
}

@Provides
@Singleton
GoogleApiClient providesGoogleApi(Context context) {
    return new GoogleApiClient.Builder(context)
            .addOnConnectionFailedListener(listener)
            .addConnectionCallbacks(callback)
            .addApi(LocationServices.API)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

可以使用它在更高模块中的相关提供者来提供上下文.

这是一个样本回购,可以在这方面真正帮助你:

https://github.com/mmirhoseini/fyber_mobile_offers