【发布时间】:2021-04-06 22:36:03
【问题描述】:
我正在尝试学习 MVVM,但遇到了一些我不知道如何解决的问题。我想创建一个存储库,它将在后台线程中获取用户坐标。事情是为了让它工作,我必须为它传递上下文,但我不知道如何为存储库传递上下文。我不能像在某些活动课程中那样轻松地通过它。
存储库
public class LocationRepository {
private void test() {
FusedLocationProviderClient client = LocationServices.getFusedLocationProviderClient(CONTEXT);
{
if (ContextCompat.checkSelfPermission(CONTEXT, Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(CONTEXT, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(CONTEXT, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
client.getLastLocation().addOnSuccessListener(CONTEXT, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null){
//TODO
}
}
});
}
else{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{
Manifest.permission.INTERNET, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
}, 1);
}
}
}
}
}
【问题讨论】:
-
您不需要传递上下文来创建
FusedLocationProviderClient。您应该通过构造函数传递/注入FusedLocationProviderClient。使用 DependencyInjection,您可以创建一次FusedLocationProviderClient(来自 ApplicationContext)并将其传递给需要它的任何人。否则,您可以将上下文从 Activity/Fragment 传递到 ViewModel 到 Repository。 -
目前我没有使用任何 DependencyInjection。您指的第二种方式实际上是下面的答案吗?
标签: java android mvvm retrofit