当前位置: 首页 > news >正文

建网站要注册吗新手怎么做自媒体

建网站要注册吗,新手怎么做自媒体,网站布局选择,dw网页设计下载Android开发MVP架构记录 安卓的MVP#xff08;Model-View-Presenter#xff09;架构是一种常见的软件设计模式#xff0c;用于帮助开发者组织和分离应用程序的不同组成部分。MVP架构的目标是将应用程序的业务逻辑#xff08;Presenter#xff09;、用户界面#xff08;V…Android开发MVP架构记录 安卓的MVPModel-View-Presenter架构是一种常见的软件设计模式用于帮助开发者组织和分离应用程序的不同组成部分。MVP架构的目标是将应用程序的业务逻辑Presenter、用户界面View和数据模型Model解耦从而提高代码的可维护性、可测试性和可扩展性。 下面是MVP架构中各个组成部分的角色和职责 Model模型Model表示应用程序的数据模型层负责处理数据的获取、存储、操作以及业务逻辑的处理。它可以是数据库、网络请求、文件系统等。Model不直接与View交互而是通过Presenter进行通信。 View视图View是用户界面层负责展示数据和接收用户的输入操作。它通常是Activity、Fragment或者自定义的View组件。View需要将用户的操作传递给Presenter并将Presenter返回的数据展示给用户。 Presenter展示器Presenter是连接Model和View的桥梁负责处理业务逻辑和控制数据流。它接收用户的操作请求并根据需要从Model中获取数据然后将处理结果传递给View进行展示。Presenter不直接操作View而是通过定义的接口进行交互。 MVP架构的优点包括 分离关注点MVP架构将业务逻辑、数据模型和用户界面分离使得各自的责任更加清晰易于维护和修改。可测试性由于Presenter和Model是独立的组件并且没有直接依赖于Android Framework因此可以更容易地进行单元测试。可扩展性通过定义接口和契约类Contract来规范组件之间的交互可以方便地进行功能扩展和替换。 一个安卓项目结构示例 activity存放activity页面 adapter存放适配器配合RecycleView展示页面 base存放基类如BaseActivity、BaseFargment将一些公共方法写在基类中 entity存放实体类或一些数据结构对象 essential存放接口类里面的接口定义了一系列规范是程序的核心 IView接口类是Activity或Fragment视图的接口定义视图有哪些执行方法每个方法的具体实现中会对UI进行操作。 //所有IView的接口 public interface IView {//登录页接口规范interface LoginView extends BaseView{void successLogin();void failLogin();}//发现页接口规范interface ExploreView extends BaseView{void showBlogs(ListBlog blogList);}//其他视图接口规范 } IPrensenter接口类是Prensenter的接口定义了Presenter的行为 //所有Presenter的接口 public interface IPresenter {//登录presenter接口interface login extends BasePresenter {void checkLogin(String body);}//发现prensenter接口interface exploreReq extends BasePresenter {void getPageBlogs(int page,int limit);}//其他presenter的接口 }fragment存放fragment页面 presenter存放prensenter实现类 public class ExplorePresenter implements IPresenter.exploreReq {IView.ExploreView exploreView;public ExplorePresenter(IView.ExploreView exploreView) {this.exploreView exploreView;}Overridepublic BaseView getBase() {return exploreView;}//观察者ObserverListBlog blogObserver new ObserverListBlog() {Overridepublic void onSubscribe(Disposable d) {}Overridepublic void onNext(ListBlog blogList) {exploreView.showBlogs(blogList);}Overridepublic void onError(Throwable e) {}Overridepublic void onComplete() {}};Overridepublic void getPageBlogs(int page, int limit) {ApiServiceFactory.getInstance().getPageBlogs(page, limit).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(blogObserver);}} retrofit网络请求框架存放相关类。 ApiService类 //retrofit定义接口 public interface ApiService {GET(api/getBlog/)ObservableListBlog getPageBlogs(Query(page) int page, Query(limit) int limit);POST(api/login)ObservableResultUser login(Body String body);// 添加其他接口方法... }ApiServiceFactory public class ApiServiceFactory {private static final String BASE_URL http://10.152.177.187:8180/;private static OkHttpClient okHttpClient;private static Retrofit retrofit;private static ApiService apiService;private static final long cacheSize 1024 * 1024 * 15;// 缓存文件最大限制大小20Mprivate static String cacheDirectory Environment.getExternalStorageDirectory() /aop; // 设置缓存文件路径private static Cache cache new Cache(new File(cacheDirectory), cacheSize); //public static ApiService getInstance() {if (apiService null) {if (retrofit null) {retrofit createRetrofit();}apiService retrofit.create(ApiService.class);}return apiService;}private static Retrofit createRetrofit() {return new Retrofit.Builder().baseUrl(BASE_URL).client(getOkHttpClient()).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();}private static OkHttpClient getOkHttpClient() {if (okHttpClient null) {OkHttpClient.Builder builder new OkHttpClient.Builder();builder.connectTimeout(30, TimeUnit.SECONDS); // 设置连接超时时间builder.writeTimeout(30, TimeUnit.SECONDS);// 设置写入超时时间builder.readTimeout(30, TimeUnit.SECONDS);// 设置读取数据超时时间builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 // builder.addNetworkInterceptor(getInterceptor());if (Constants.ISDEBUG) {builder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));//拦截器}builder.cache(cache);// 设置缓存cacheDir和cacheSize需要根据实际情况设置okHttpClient builder.build();}return okHttpClient;}private static Interceptor getInterceptor() {// 返回你自定义的拦截器如果没有特殊需求可以返回nullreturn null;} }Result类规范返回数据结构类使所有的返回数据结构为result类真正数据存放在result.data中这样就规范了返回结果。 //统一返回数据结构 public class ResultT {private String code;private String msg;private T data; //T表示泛型public String getCode() {return code;}public String getMsg() {return msg;}public T getData() {return data;}public void setCode(String code) {this.code code;}public void setMsg(String msg) {this.msg msg;}public void setData(T data) {this.data data;}public Result() {}public Result(T data) {this.data data;}public static Result success() {Result result new Result();result.setCode(200);result.setMsg(成功);return result;}public static T ResultT success(T data) {ResultT result new Result(data);result.setCode(0);result.setMsg(成功);return result;}public static Result error(String code, String msg) {Result result new Result();result.setCode(code);result.setMsg(msg);return result;} }util存放工具类、常量类、全局变量
http://www.yutouwan.com/news/221350/

相关文章:

  • 中企动力做网站行吗网站的客户体验
  • 做电影网站用什么源码网站降权不更新文章可以吗
  • 低价网站制作顺德芜湖城建集团
  • 合肥建设工程交易网站深圳建筑公司排行榜
  • 自己做网站 怎么赚钱潍坊 企业网站建设
  • 如何通过域名访问网站长沙学网页设计的学校有哪些
  • 最容易做流量的网站做网站需要看什么书
  • 自己弄个网站要多少钱怎么编写一个网页
  • 免费网站建设平台南宁定制网站制作电话
  • 7网站建设1南宁本地网站有哪些?
  • 青岛做视频的网站照片视频制作
  • 数码产品网站建设计划书wordpress如何本地安装插件
  • 泰安网站建设最好深圳网站建设推广方法
  • 加强网站功能建设南平网站怎么做seo
  • 要注册一家公司需要什么条件广州seo建站
  • 郑州建设公司网站python wordpress
  • 网络营销网站建设诊断报告wordpress 评论框样式
  • html5农业网站模板有赞微商城入口
  • 网站维护中是什么意思做网站放广告收益
  • 惠阳开发网站建设提升学历的学校
  • 源码网站取名汾阳今天重大新闻
  • 设计网站公司湖南岚鸿公司惠东县网站建设
  • 网站建设方案书原件鞋设计师之家官网
  • 如何做网站方案合肥市建设网
  • 抓取网站后台阿里巴巴国际站开店流程及费用
  • 网站建设百家号html网站底部导航栏怎么做
  • 如何破解网站后台密码企业网站设计的基本内容包括哪些
  • 网站设计成功案例银行营销案例100例
  • 第三方编辑网站怎么做wordpress 柚子皮下载
  • 青岛国家高新区建设局网站淄博建网站多少钱