Реализация модернизации и залпа в Android-приложении бок о бок - PullRequest
0 голосов
/ 04 июня 2019

Я пробовал Приложение, следующее архитектуре MVVM, в котором мне нужно извлечь файл JSON из сети, я пытаюсь реализовать как модификацию, так и Volley, где при первом нажатии на кнопку Retrofit используется для заполнения RecyclerView, тогда как на другая кнопка Volley должна сделать то же самое.

Я попытался реализовать оба вызова в классе ViewModel, но работает только Retrofit.

public class MainViewModel extends ViewModel {
    public void setmContext(Context mContext) {
        this.mContext = mContext;
    }

    private MutableLiveData<List<Movie>> movieList;
    private MutableLiveData<Boolean> isLoading;

    private MovieService movieService;
    private VolleyService volleyService;
    private JsonArrayRequest ArrayRequest ;
    private RequestQueue requestQueue ;
    private Context mContext;

    public MainViewModel(MovieService movieService) {
        this.movieService = movieService;
        movieList = new MutableLiveData<>();
        isLoading = new MutableLiveData<>();
    }
    public MainViewModel() {
    }



    MutableLiveData<List<Movie>> getMovies() {
        return movieList;
    }
    MutableLiveData<Boolean> getLoadingStatus() {
        return isLoading;
    }

    void loadMoviesNetwork() {
        setIsLoading(true);

        Call<MovieResponse> movieCall = movieService.getMovieApi().getAllMovie();
        movieCall.enqueue(new MovieCallback());



    }
    void loadMovieLocal() {
        setIsLoading(true);

        String name = "Breaking Bad";
        String image = "https://coderwall-assets-0.s3.amazonaws.com/uploads/picture/file/622/breaking_bad_css3_svg_raw.png";
        String name2= "Sherlock";
        String image2= "data:image/jpeg;base64,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";

        List<Movie> movies = new ArrayList<>();
        movies.add(new Movie(name,image,name));
        movies.add(new Movie(name2,image2,name2));
        movies.add(new Movie(name,image,name));
        setMovies(movies);
    }
    void showEmptyList() { setMovies(Collections.<Movie>emptyList()); }

    private void setIsLoading(boolean loading)
    {
        isLoading.postValue(loading);
    }

    private void setMovies(List<Movie> movies) {
        setIsLoading(false);
        movieList.postValue(movies);
    }
    /**
     * Callback
     **/
    private class MovieCallback implements Callback<MovieResponse> {
        @Override
        public void onResponse(@NonNull Call<MovieResponse> call, @NonNull Response<MovieResponse> response) {
            MovieResponse movieResponse = response.body();
            if (movieResponse != null) {
                setMovies(movieResponse.getMovies());
            } else {
                setMovies(Collections.<Movie>emptyList());
            }
        }
        @Override
        public void onFailure(Call<MovieResponse> call, Throwable t) {
           /* setMovies(Collections.<Movie>emptyList());*/
            try{
               call.clone();
            }
                catch (Exception e)
                {
                    setMovies(Collections.<Movie>emptyList());
                }
        }
    }

    void loadMovieVolley()
    {
        setIsLoading(true);

        final List<Movie> mMovie = new ArrayList<>();
        requestQueue=Volley.newRequestQueue(mContext);
        ArrayRequest = new JsonArrayRequest(Constants.URL+"movies/", new com.android.volley.Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                JSONObject jsonObject ;


                for (int i = 0 ; i<response.length();i++) {

                    try {

                        jsonObject = response.getJSONObject(i);
                        Movie movie = new Movie();
                        movie.setDescription(jsonObject.getString("description"));
                        movie.setTitle(jsonObject.getString("title"));
                        movie.setImage((jsonObject.getString("image")));
                        mMovie.add(movie);
                    }
                    catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
        setMovies(mMovie);

            }
        }, new com.android.volley.Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });


          //requestQueue = Volley.newRequestQueue();
        requestQueue.add(ArrayRequest);
    }
       // setMovies(Collections.<Movie>emptyList());
    }
...