我正在努力学习mvvm,我遇到了一些我不知道如何解决的问题。我想建立一个存储库,在后台线程中获取用户坐标。事情是为了让它工作,我必须为它传递上下文,但我不知道如何为respository传递上下文。我不能像在活动课上那样轻易及格。
存储库
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);
}
}
}
}
}
1条答案
按热度按时间jhiyze9q1#
如果您不想使用依赖注入,请考虑这个问题。
这是一个最小的例子,留下了很多东西有待改进!
在这个例子中,我们不会传递
Context
因为这可能会导致内存泄漏(如果处理不彻底),但会造成FusedLocationProviderClient
并将其传递给viewmodel和存储库。注意:避免传递与android相关的东西,比如
Context
,View
的视图模型和较低的层。它将使测试和重构变得更容易,因为您对android的依赖更少。在活动中,您将获得viewmodel并创建
FusedLocationProviderClient
:然后在viewmodel中
locationProvider
通过构造器或设置器: