I am using AndroidViewModel
in application.But when my application is opened the method in ViewModel
class not called and data is not set on RecyclerView
.This is code for my Model
class public class Foodie {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
This is code for my ViewModel class which extends AndroidViewModel
so that I can use Volley
in my application.
public class FoodieViewModel extends AndroidViewModel {
public MutableLiveData<Foodie> foodieList;
public FoodieViewModel(@NonNull Application application) {
super(application);
}
public MutableLiveData<Foodie> getFoodies(){
if(foodieList==null){
foodieList=new MutableLiveData<>();
loadFoodies();
}
return foodieList;
}
public void loadFoodies(){
String url="someURL";
JsonArrayRequest request =new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
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);
foodieList.setValue(foodie);
}
}catch (JSONException e){
e.printStackTrace();
}
}
}, 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 token";
headers.put("Authorization", auth);
headers.put("Content-Type", "application/json");
return headers;
}
};
AppController.getInstance().addToRequestQueue(request);
}
}
This is code for my MainActivity
where data is set in RecyclerView
public class MainActivity extends AppCompatActivity {
ArrayList<Foodie> foodies;
RecyclerView recyclerView;
FoodieAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
FoodieViewModel model= ViewModelProviders.of(this).get(FoodieViewModel.class);
model.getFoodies().observe(this, new Observer<Foodie>() {
@Override
public void onChanged(@Nullable Foodie foodie) {
adapter=new FoodieAdapter(foodies,MainActivity.this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
}
But when application is opened the LoadFoodies method is never called and data is not set on Recyclerview. How to resolve this ?