Jos*_*zet 8 java android mvvm dagger-2
我正在开发一个使用 MVVM 架构的 Android 应用程序。我的问题是我的存储库(负责从 Web 获取 JSON)需要访问上下文。
我已经阅读了有关 StackOverflow 的一些建议。到目前为止,我收集到的最合理的选择如下:
使用 Dagger 2 以某种方式注入上下文。
让我ViewModel从扩展AndroidViewModel中获取应用程序上下文并将其传递给存储库。
截至目前,我有一个ViewModel和一个Repo
RoomFragmentViewModel.java:
public class MyViewModel extends ViewModel {
private MutableLiveData<List<JSONObject>> rooms;
private Repository repository;
public void init(){
if(rooms != null){
return;
}
repository = repository.getInstance();
rooms = repository.getRooms();
}
Run Code Online (Sandbox Code Playgroud)
存储库.java:
public class Repository {
private static Repository instance;
private ArrayList<JSONObject> actualRooms = new ArrayList<>();
public static Repository getInstance() {
if (instance == null) {
instance = new Repository();
}
return instance;
}
public MutableLiveData<List<JSONObject>> getRooms() {
...
}
private void setRooms() {
...
// Here I am fetching data from my server, but in order to to do so I require a context
String url = "http://10.0.0.5:8000/api";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.GET, null, new Response.Listener<JSONObject>() {...
// Context needs to be provided right here:
MySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);
}
}
Run Code Online (Sandbox Code Playgroud)
由于互联网上的说法相互矛盾,我不确定我应该如何解决这个问题。如果您的答案使用了 dagger,那么您能不能很好地提供代码解释,因为我对 dagger 完全陌生。先感谢您。
我最终通过 dagger 注入了上下文。然而,从我的角度来看,进行ViewModel扩展AndroidViewModel也是一种有效的选择,而且绝对是更容易的选择。如果我正在开发一个简单且小型的应用程序,我可能会建议直接扩展AndroidViewModel以避免来自 dagger 的不必要的样板代码。
我遵循了codingwithmith的dagger系列来实现我自己的解决方案。因此,他的频道可能对未来的读者有用: https://www.youtube.com/channel/UCoNZZLhPuuRteu02rh7bzsw/featured
| 归档时间: |
|
| 查看次数: |
2773 次 |
| 最近记录: |