代码之家  ›  专栏  ›  技术社区  ›  Xay

Android MVVM设计模式在logcat中不显示空值,但在调用api设置数据时,它显示了repository类中arraylist的大小

  •  -2
  • Xay  · 技术社区  · 4 年前

    public class ImagesRepositoy {
    private static ImagesRepositoy instance;
    private ArrayList<Images> dataset = new ArrayList<>();
    private RequestQueue queue;
    private static Context mCtx;
    private StringRequest request;
    
    public ImagesRepositoy() {
    }
    
    public ImagesRepositoy(Context context) {
        mCtx = context;
    }
    
    public static ImagesRepositoy getInstance() {
        if (instance == null) {
            instance = new ImagesRepositoy();
        }
        return instance;
    }
    
    public MutableLiveData<List<Images>> getIMAGES() {
        getFromApi();
        MutableLiveData<List<Images>> data = new MutableLiveData<>();
        data.setValue(dataset);// here I am getting empty array size
        Log.e("DATA",data.getValue().toString());
        return data;
    }
    
    private void getFromApi() {
        Log.e("YUPP", "HANN");
        request = new StringRequest(Request.Method.GET, ImageApi + "APIKEY&limit=25", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("responsefromserv", response + "null");
                try {
    
    
                    JSONObject jsonObject = new JSONObject(response);
                    JSONObject images, original, jsonObject3;
                    JSONArray jsonArray = jsonObject.getJSONArray("data");
                    Log.d("DATAATA", jsonObject.getJSONArray("data") + ".");
    
    
                    for (int i = 0; i < jsonArray.length(); i++) {
                        Images Imgs = new Images();
                        images = jsonArray.getJSONObject(i);
                        original = images.getJSONObject("images");
                        jsonObject3 = original.getJSONObject("original");
                        Imgs.setUrl(jsonObject3.getString("url"));
                        Log.e("JSONE3", Imgs.getUrl() + "");
                        dataset.add(Imgs);   // HERE I AM GETTING 25 size
    
                    }
    
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("error", error.toString());
            }
        });
        queue = Volley.newRequestQueue(mCtx);
    
        queue.add(request);
    
    }}
    

    查看模型,从中获取逻辑实例

      public class HomeViewModel extends ViewModel {
    private ImagesRepositoy repositoy;
    private MutableLiveData<List<Images>> url;
    
    
    public void init() {
        if (url != null) {
            return;
        }
        Log.e("INIT","OK");
        repositoy = ImagesRepositoy.getInstance();
        url = repositoy.getIMAGES();
    }
    
    public LiveData<List<Images>> getIMAGES() {
        Log.e("UUUU",url.getValue().toString());
        return url;
    }}
    
    
    
    
            
      **THIS IS CALLED WHEN I CHANGE SCREEN ROTATION
    

    homeViewModel.getCallApi();此API从服务器获取GIF图像,但我不知道为什么在我的设备旋转时调用此API。如有任何建议,将不胜感激**

      public class HomeFragment extends Fragment {
    
    private List<Images> imagesList = new ArrayList<>();
    private RecyclerView recyclerView;
    private RequestQueue queue;
    private MyGifAdapter myGifAdapter;
    private HomeViewModel homeViewModel;
    
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
    
        View root = inflater.inflate(R.layout.fragment_home, container, false);
        recyclerView = root.findViewById(R.id.my_recycler_view);
        homeViewModel =
                new ViewModelProvider(this).get(HomeViewModel.class);
        new HomeViewModel(getActivity());
        homeViewModel.getCallApi();
        homeViewModel.getIMAGES().observe(getActivity(), new Observer<ArrayList<Images>>() {
            @Override
            public void onChanged(ArrayList<Images> s) {
    
                if(s!=null)
                {
                    imagesList=s;
                    myGifAdapter.setImages(s);
    
    
                }
    
                myGifAdapter.notifyDataSetChanged();
            }
        });
        GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
        recyclerView.setLayoutManager(gridLayoutManager); // set LayoutManager to RecyclerView
        Log.e("VMMM", homeViewModel.getIMAGES().getValue() + ".");
        myGifAdapter = new MyGifAdapter(getContext(), homeViewModel.getIMAGES().getValue());
        recyclerView.setAdapter(myGifAdapter); // set the Adapter to RecyclerView
    
        return root;
    }
    
    0 回复  |  直到 4 年前