Kaynağa Gözat

Refactor: Add Repository and Dao for course and courseware

kenny67nju 5 yıl önce
ebeveyn
işleme
649ca90b5c

+ 2 - 2
app/src/main/java/cn/seecoder/courselearningdemo/network/CourseService.java → app/src/main/java/cn/seecoder/courselearningdemo/dao/CourseDao.java

@@ -1,4 +1,4 @@
-package cn.seecoder.courselearningdemo.network;
+package cn.seecoder.courselearningdemo.dao;
 
 import java.util.List;
 
@@ -9,7 +9,7 @@ import retrofit2.http.GET;
 import retrofit2.http.Path;
 import retrofit2.http.Query;
 
-public interface CourseService {
+public interface CourseDao {
     /**
      * 查询一门课程
      * @param courseId 课程编号

+ 2 - 2
app/src/main/java/cn/seecoder/courselearningdemo/network/CourseWareService.java → app/src/main/java/cn/seecoder/courselearningdemo/dao/CourseWareDao.java

@@ -1,4 +1,4 @@
-package cn.seecoder.courselearningdemo.network;
+package cn.seecoder.courselearningdemo.dao;
 
 import java.util.List;
 
@@ -8,7 +8,7 @@ import retrofit2.http.GET;
 import retrofit2.http.Path;
 import retrofit2.http.Query;
 
-public interface CourseWareService {
+public interface CourseWareDao {
     /**
      * 获取课程的课件列表
      * @param courseId 课程编号

+ 4 - 2
app/src/main/java/cn/seecoder/courselearningdemo/network/RetrofitClient.java

@@ -1,5 +1,7 @@
 package cn.seecoder.courselearningdemo.network;
 
+import cn.seecoder.courselearningdemo.dao.CourseDao;
+import cn.seecoder.courselearningdemo.dao.CourseWareDao;
 import cn.seecoder.courselearningdemo.utils.Constant;
 import retrofit2.Retrofit;
 import retrofit2.converter.gson.GsonConverterFactory;
@@ -9,8 +11,8 @@ public class RetrofitClient {
             .baseUrl(Constant.HOST) //设置网络请求的Url地址
             .addConverterFactory(GsonConverterFactory.create()) //设置数据解析器
             .build();
-    public static CourseService courseService = retrofit.create(CourseService.class);
-    public static CourseWareService courseWareService = retrofit.create(CourseWareService.class);
+    public static CourseDao courseDao = retrofit.create(CourseDao.class);
+    public static CourseWareDao courseWareDao = retrofit.create(CourseWareDao.class);
     public static CourseOrderService courseOrderService = retrofit.create(CourseOrderService.class);
     public static UserService userService = retrofit.create(UserService.class);
     public static NotifyService notifyService = retrofit.create(NotifyService.class);

+ 62 - 0
app/src/main/java/cn/seecoder/courselearningdemo/repository/CourseRepository.java

@@ -0,0 +1,62 @@
+package cn.seecoder.courselearningdemo.repository;
+
+import androidx.lifecycle.MutableLiveData;
+
+import java.util.List;
+
+import cn.seecoder.courselearningdemo.dao.CourseDao;
+import cn.seecoder.courselearningdemo.dao.UserDao;
+import cn.seecoder.courselearningdemo.model.Course;
+import cn.seecoder.courselearningdemo.model.CourseWare;
+import cn.seecoder.courselearningdemo.model.User;
+import cn.seecoder.courselearningdemo.network.RetrofitClient;
+import cn.seecoder.courselearningdemo.utils.LogUtil;
+import cn.seecoder.courselearningdemo.utils.ToastUtil;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class CourseRepository {
+    private CourseDao courseDao = RetrofitClient.courseDao;
+    private final MutableLiveData<Course> courseData = new MutableLiveData<>();
+    private final MutableLiveData<List<CourseWare>> courseWareData = new MutableLiveData<>();
+
+
+    public CourseRepository(Course course, Integer courseId){
+        loadCourse(courseId);
+    }
+
+
+    public MutableLiveData<Course> getCourseData(){
+        return courseData;
+
+    }
+
+    private void loadCourse(Integer courseId){
+        String uid = null;
+        User user = UserDao.getUser();
+        if(user!=null && user.getUid()!=null)
+            uid = user.getUid();
+        Call<Course> courseCall = courseDao.getCourse(courseId, uid);
+        courseCall.enqueue(new Callback<Course>() {
+            @Override
+            public void onResponse(Call<Course> call, Response<Course> response) {
+//                LogUtil.i("loadCourse ", response.body().toString());
+                if(response.body() == null)
+                    ToastUtil.showShortToast("后端数据异常...");
+                else {
+                    courseData.setValue(response.body());
+                }
+            }
+
+            @Override
+            public void onFailure(Call<Course> call, Throwable t) {
+                LogUtil.e(courseCall, "loadCourse failure: "+t.getMessage() + "  caused by: "+t.getCause());
+                ToastUtil.showShortToast("网络错误,请稍后重试!");
+            }
+        });
+    }
+
+
+
+}

+ 58 - 0
app/src/main/java/cn/seecoder/courselearningdemo/repository/CourseWareRepository.java

@@ -0,0 +1,58 @@
+package cn.seecoder.courselearningdemo.repository;
+
+import androidx.lifecycle.MutableLiveData;
+
+import java.util.List;
+
+
+import cn.seecoder.courselearningdemo.dao.CourseWareDao;
+import cn.seecoder.courselearningdemo.dao.UserDao;
+import cn.seecoder.courselearningdemo.model.Course;
+import cn.seecoder.courselearningdemo.model.CourseWare;
+import cn.seecoder.courselearningdemo.model.User;
+import cn.seecoder.courselearningdemo.network.RetrofitClient;
+import cn.seecoder.courselearningdemo.utils.LogUtil;
+import cn.seecoder.courselearningdemo.utils.ToastUtil;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class CourseWareRepository {
+    private CourseWareDao courseWareDao = RetrofitClient.courseWareDao;
+    private final MutableLiveData<List<CourseWare>> courseWareData = new MutableLiveData<>();
+    private Course course;
+
+    public CourseWareRepository(Course c, Integer courseId){
+        course = c;
+        loadCourseWareData();
+    }
+
+    public MutableLiveData<List<CourseWare>> getCourseWareData(){
+        return courseWareData;
+    }
+
+    private void loadCourseWareData(){
+        String uid = null;
+        User user = UserDao.getUser();
+        if(user!=null && user.getUid()!=null)
+            uid = user.getUid();
+        if(course==null || course.getId()==null)
+            return;
+        Call<List<CourseWare>> courseWareCall = courseWareDao.getCourseWare(course.getId(), uid);
+        courseWareCall.enqueue(new Callback<List<CourseWare>>() {
+            @Override
+            public void onResponse(Call<List<CourseWare>> call, Response<List<CourseWare>> response) {
+                if(response.body() == null)
+                    ToastUtil.showShortToast("后端数据异常...");
+                else
+                    courseWareData.setValue(response.body());
+            }
+
+            @Override
+            public void onFailure(Call<List<CourseWare>> call, Throwable t) {
+                LogUtil.e(courseWareCall, "loadCourseWareData failure: "+t.getMessage() + "  caused by: "+t.getCause());
+                ToastUtil.showShortToast("网络错误,请稍后重试!");
+            }
+        });
+    }
+}

+ 8 - 4
app/src/main/java/cn/seecoder/courselearningdemo/ui/activity/CourseActivity.java

@@ -74,10 +74,14 @@ public class CourseActivity extends AppCompatActivity {
 
     private void initViewModel() {
         courseViewModel = new ViewModelProvider(CourseActivity.this).get(CourseViewModel.class);
-        if(course != null)
-            courseViewModel.setCourse(course);
-        else if(courseId != null && courseId != 0)
-            courseViewModel.loadCourse(courseId);
+//        if(course != null)
+//            courseViewModel.setCourse(course);
+//        else if(courseId != null && courseId != 0)
+//            courseViewModel.loadCourse(courseId);
+
+        courseViewModel.setCourse(course);
+
+
     }
 
     private void initObserver() {

+ 20 - 52
app/src/main/java/cn/seecoder/courselearningdemo/viewmodel/CourseViewModel.java

@@ -11,6 +11,8 @@ import cn.seecoder.courselearningdemo.model.Course;
 import cn.seecoder.courselearningdemo.model.CourseWare;
 import cn.seecoder.courselearningdemo.model.User;
 import cn.seecoder.courselearningdemo.network.RetrofitClient;
+import cn.seecoder.courselearningdemo.repository.CourseRepository;
+import cn.seecoder.courselearningdemo.repository.CourseWareRepository;
 import cn.seecoder.courselearningdemo.utils.LogUtil;
 import cn.seecoder.courselearningdemo.utils.ToastUtil;
 import retrofit2.Call;
@@ -18,72 +20,38 @@ import retrofit2.Callback;
 import retrofit2.Response;
 
 public class CourseViewModel extends ViewModel {
-    private final MutableLiveData<Course> courseData = new MutableLiveData<>();
-    private final MutableLiveData<List<CourseWare>> courseWareData = new MutableLiveData<>();
+    private MutableLiveData<Course> courseData ;
+    private MutableLiveData<List<CourseWare>> courseWareData ;
+    private CourseRepository courseRepository;
+    private CourseWareRepository courseWareRepository;
+    private Course course;
 
-    public void setCourse(Course course){
-        this.courseData.setValue(course);
-        loadCourseWareData();
+    public CourseViewModel(){
+    }
+    public void setCourse(Course c){
+        course  = c;
+        loadCourse(course.getId());
     }
-
     public void loadCourse(Integer courseId){
-        String uid = null;
-        User user = UserDao.getUser();
-        if(user!=null && user.getUid()!=null)
-            uid = user.getUid();
-        Call<Course> courseCall = RetrofitClient.courseService.getCourse(courseId, uid);
-        courseCall.enqueue(new Callback<Course>() {
-            @Override
-            public void onResponse(Call<Course> call, Response<Course> response) {
-//                LogUtil.i("loadCourse ", response.body().toString());
-                if(response.body() == null)
-                    ToastUtil.showShortToast("后端数据异常...");
-                else {
-                    courseData.setValue(response.body());
-                    loadCourseWareData();
-                }
-            }
+        courseRepository = new CourseRepository(course,courseId);
+        courseData = courseRepository.getCourseData();
+
+        courseWareRepository = new CourseWareRepository(course,courseId);
+        courseWareData = courseWareRepository.getCourseWareData();
 
-            @Override
-            public void onFailure(Call<Course> call, Throwable t) {
-                LogUtil.e(courseCall, "loadCourse failure: "+t.getMessage() + "  caused by: "+t.getCause());
-                ToastUtil.showShortToast("网络错误,请稍后重试!");
-            }
-        });
     }
 
+
     public LiveData<Course> getCourseData(){
+
         return courseData;
     }
 
     public LiveData<List<CourseWare>> getCourseWareData(){
+
         return courseWareData;
     }
 
-    private void loadCourseWareData(){
-        Course course = courseData.getValue();
-        String uid = null;
-        User user = UserDao.getUser();
-        if(user!=null && user.getUid()!=null)
-            uid = user.getUid();
-        if(course==null || course.getId()==null)
-            return;
-        Call<List<CourseWare>> courseWareCall = RetrofitClient.courseWareService.getCourseWare(course.getId(), uid);
-        courseWareCall.enqueue(new Callback<List<CourseWare>>() {
-            @Override
-            public void onResponse(Call<List<CourseWare>> call, Response<List<CourseWare>> response) {
-                if(response.body() == null)
-                    ToastUtil.showShortToast("后端数据异常...");
-                else
-                    courseWareData.setValue(response.body());
-            }
 
-            @Override
-            public void onFailure(Call<List<CourseWare>> call, Throwable t) {
-                LogUtil.e(courseWareCall, "loadCourseWareData failure: "+t.getMessage() + "  caused by: "+t.getCause());
-                ToastUtil.showShortToast("网络错误,请稍后重试!");
-            }
-        });
-    }
 
 }

+ 4 - 1
app/src/main/java/cn/seecoder/courselearningdemo/viewmodel/HomeViewModel.java

@@ -9,6 +9,8 @@ import java.util.List;
 
 import cn.seecoder.courselearningdemo.model.CourseOrder;
 import cn.seecoder.courselearningdemo.model.ResultVO;
+
+
 import cn.seecoder.courselearningdemo.utils.Constant;
 import retrofit2.Call;
 import retrofit2.Callback;
@@ -27,6 +29,7 @@ public class HomeViewModel extends ViewModel {
     private MutableLiveData<List<Course>> courseData;
     private final MutableLiveData<Boolean> courseOrderFlag = new MutableLiveData<>();
 
+
     public void setUid(String uid) {
         this.uid = uid;
         query();
@@ -69,7 +72,7 @@ public class HomeViewModel extends ViewModel {
 
     private void loadData(){
         stateData.setValue(LoadState.LOADING);
-        Call<PageInfo<Course>> courseCall =  RetrofitClient.courseService.getAllCourses(currentPage, uid, queryKey);
+        Call<PageInfo<Course>> courseCall =  RetrofitClient.courseDao.getAllCourses(currentPage, uid, queryKey);
         // 异步调用
         courseCall.enqueue(new Callback<PageInfo<Course>>() {
             @Override

+ 1 - 1
app/src/main/java/cn/seecoder/courselearningdemo/viewmodel/StudyViewModel.java

@@ -34,7 +34,7 @@ public class StudyViewModel extends ViewModel {
     public void loadData(){
         if(uid == null) return;
         LogUtil.i(this, "开始加载用户已购买课程列表");
-        Call<List<Course>> courseCall =  RetrofitClient.courseService.getCourseByUid(uid);
+        Call<List<Course>> courseCall =  RetrofitClient.courseDao.getCourseByUid(uid);
         // 异步调用
         courseCall.enqueue(new Callback<List<Course>>() {
             @Override