通过MVVM模型下载数据

时间:2018-10-30 03:58:32

标签: android mvvm

我想在MVVM模型中实现非常简单的功能:从Firestore下载数据,同时向用户显示进度。视图,视图模型和存储库中应该有什么?检查了Android文档,但不清楚如何实现。有人可以建议吗。

编辑

已使用以下方法创建了存储库类,用于将数据从存储库类传递到ViewModel。

public List<Passion> downloadpassionlist()
{   
    new downloadPassionAsyncTask(mPassionDao,fsDB, new 
    OnDownLoadPassionList() {
        @Override
        public List<Passion> OnResult(List<Passion> passionList) {
            passions = passionList; //Passionlist contains required data.
            return passionList;
        }
    }).execute();

    return passions;//Getting 0 value here
}

在存储库类中创建的Asynch类,用于从Firestore中获取数据。

 public static class downloadPassionAsyncTask extends AsyncTask<Passion, 
 Void, List<Passion>> {

    private PassionDao mAsyncTaskDao;
    private Firestore_dB firesDB;
    private String resp;
    ProgressDialog progressDialog;
    OnDownLoadPassionList monDownLoadPassionList;
    List<Passion> result = new ArrayList<>();

    public interface OnSuccess
    {
        public List<Passion> OnComplete(List<Passion> passionList);

    }

    downloadPassionAsyncTask(PassionDao dao,Firestore_dB 
    fsDB,OnDownLoadPassionList onDownLoadPassionList) {
        mAsyncTaskDao = dao;
        firesDB = fsDB;
        monDownLoadPassionList = onDownLoadPassionList;
    }

    @Override
    protected List<Passion> doInBackground(final Passion... params) {

        firesDB.getPassionListfill(new OnSuccess() {
            @Override
            public List<Passion> OnComplete(List<Passion> passionList) 
  {//1st callback
                monDownLoadPassionList.OnResult(passionList);//2nd callback
                return null;
            }
        });

        return result;
    }

}

用于存储数据的Firestore方法

  public List<Passion> 
  getPassionListfill(PassionRepository.downloadPassionAsyncTask.OnSuccess 
  callback)
  {
   List<Passion>updatepassionlist = new ArrayList<>();
     CollectionReference people_ref = 
  this.get_collection_firestore("Passion");
     Log.d(TAG, "Call Back check outside");
     people_ref.get().addOnCompleteListener(new 
   OnCompleteListener<QuerySnapshot>() {
         @Override
         public void onComplete(@NonNull Task<QuerySnapshot> task) {
             if(task.isSuccessful())
             {Log.d(TAG, "Call Back check");
                 for(QueryDocumentSnapshot document : task.getResult())
                 {
                     Passion passion = document.toObject(Passion.class);
                    // Log.d(TAG, "Call Back check"+passion);
                     updatepassionlist.add(passion);
                 }

             }
             else {
                 Log.d(TAG, "Error getting documents: ", 
 task.getException());
             }

             callback.OnComplete(updatepassionlist);
         }
     });
     return updatepassionlist;

     }

我的查询:1.在方法downloadpassionlist中没有获得数据热情变量。此值将传递给ViewModel,然后传递给Activity以进行查看。 2.在获取数据时,要显示下载图像。如何实施以及在何处实施?

0 个答案:

没有答案