在Android的Repository或ViewModel中使用共享首选项值
我在我的应用程序中使用在Android的Repository或ViewModel中使用共享首选项值,android,android-recyclerview,sharedpreferences,android-architecture-components,Android,Android Recyclerview,Sharedpreferences,Android Architecture Components,我在我的应用程序中使用ArchitectureComponents。我从ViewModel发出API请求,并使用ActivityMain中的ViewModel将数据设置为RecyclerView。要进行API调用,我需要一个令牌,它保存在SharedReference中。我需要获取该令牌并将其添加到发出请求时的标题。在何处以及如何获取SharedReference值。它应该在ViewModel或存储库中获取。 这是myViewModel的代码 public class FoodieViewMod
ArchitectureComponents
。我从ViewModel
发出API
请求,并使用ActivityMain中的ViewModel将数据设置为RecyclerView
。要进行API调用,我需要一个令牌
,它保存在SharedReference
中。我需要获取该令牌并将其添加到发出请求时的标题。在何处以及如何获取SharedReference值。它应该在ViewModel或存储库中获取。这是my
ViewModel的代码
public class FoodieViewModel extends AndroidViewModel {
FoodieRepository repository;
MutableLiveData<ArrayList<Foodie>> foodieList;
public FoodieViewModel(@NonNull Application application) {
super(application);
repository=new FoodieRepository(application);
}
LiveData<ArrayList<Foodie>> getAllFoodie(){
if(foodieList==null){
foodieList=new MutableLiveData<ArrayList<Foodie>>();
loadFoodies();
}
return foodieList;
}
public void loadFoodies(){
String url="somethimg.com";
JsonArrayRequest request =new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
ArrayList<Foodie> list=new ArrayList<>();
try {
for(int i=0;i<response.length();i++){
JSONObject obj=response.getJSONObject(i);
Foodie foodie=new Foodie();
String name=obj.getString("firstname");
foodie.setName(name);
list.add(foodie);
}
}catch (JSONException e){
e.printStackTrace();
}
foodieList.setValue(list);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
String auth = "JWT " + "sometoken";
headers.put("Authorization", auth);
headers.put("Content-Type", "application/json");
return headers;
}
};
AppController.getInstance().addToRequestQueue(request);
}
公共类FoodiewModel扩展了AndroidViewModel{
食品储存库;
可变LiveData食物列表;
公共FoodieViewModel(@NonNull应用程序){
超级(应用);
repository=新的FoodieRepository(应用程序);
}
LiveData getAllFoodie(){
if(foodieList==null){
foodieList=new MutableLiveData();
loadFoodies();
}
返回食物清单;
}
公共食品{
字符串url=“something.com”;
JsonArrayRequest=newJSONArrayRequest(request.Method.GET,url,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
ArrayList=新建ArrayList();
试一试{
对于(int i=0;iYou可以为共享首选项创建单独的存储库。然后使用自定义工厂将其添加到视图模型中。请检查此项
public class FoodieViewModel extends AndroidViewModel {
........
SharedPreferences sharedpreferences =getApplication().getSharedPreferences("preference_key", Context.MODE_PRIVATE);
...........
//wherever u want to get token
String token = sharedpreferences.getString("token", "")
}