android中的retrofit2+okHttp+dagger框架

本文介绍了如何在Android项目中结合retrofit2、okHttp和dagger框架来实现网络访问。retrofit用于简化网络请求,dagger则帮助解耦业务逻辑。详细步骤包括在build.gradle文件中添加依赖,构建业务层的网络接口,以及在MainActivity中初始化和使用这些组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:叙述retrofit2+dagger框架特点:
   
  retrofit框架:主要将访问网络的业务代码进行抽取成用函数+注解的方式,方便访问网络!
  dagger框架:主要将activity层的复杂的业务逻辑代码进行分离到Component,module,presenter层!

二:配置过程
   
     1:在项目层的build.gradle文件中添加代码如下:
         
    buildscript {
       repositories {
            jcenter()
        }
       dependencies {
            classpath 'com.android.tools.build:gradle:2.2.1'
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
       }
   }

      2:在app层的build.gradle文件中添加设置如下:
    
   apply plugin: 'com.android.application'
   //需要在mvp中的moudule中使用apt
   apply plugin: 'com.neenbedankt.android-apt'
   android {
       compileSdkVersion 24
       buildToolsVersion "24.0.3"
       ......
   }

   dependencies {
   
       ......

       //dagger的依赖
       compile 'com.google.dagger:dagger:2.4'
       apt 'com.google.dagger:dagger-compiler:2.4'
       provided 'org.glassfish:javax.annotation:10.0-b28'

       //添加retrofit的依赖
       compile 'com.squareup.retrofit2:retrofit:2.1.0'
       //将retrofit与gson进行关联
       compile 'com.squareup.retrofit2:converter-gson:2.1.0'
       compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

       ...........

       //butterknife依赖
       compile 'com.jakewharton:butterknife:5.1.1'
   }

      3:具体的包的结构如下
                             


          4:代码的构建过程:

            4.1:业务层中的访问网络业务构建
                     将单,多文件上传为实例,在ResponseInfoAPI类中结合Retrofit2.0的注解的方式创建文件上传相关的方法 

                 
     public interface ResponseInfoApi {
    	/**
     	* 进行单文件上传
     	* @param descritpion
     	* @param file
     	* @return
     	*/
    	@Multipart
    	@POST(Constants.UPLOAD)
    	Call<ResponseInfo> upload(@Part("description") RequestBody descritpion, @Part MultipartB           ody.Part file);

    	/**
     	* 通过多个MultipartBody.Part集合的方式上传多个文件
     	* @param parts
     	* @return
     	*/
    	@Multipart
    	@POST(Constants.UPLOAD)
    	Call<ResponseInfo> uploadFilesWithParts(@Part List<MultipartBody.Part> parts);

    	/**
     	 * 通过RequestBody进行上传多个文件
     	 * @param multipartBody
         * @return
     	 */
    	 @POST(Constants.UPLOAD)
    	 Call<ResponseInfo> uploadFilesWithRequestBody(@Body MultipartBody multipartBody);
    }


                   
       4.2  对业务层中的MainActivityPresenter类中的"上传文件具体业务代码"实现:
               构造函数:引入MainActivity类,同时结合OKhttp,创建ResponseInfoApi的实例:
               
                   
	public class MainActivityPresenter {
    		private MainActivity mainActivity;
   		private ResponseInfoApi responseInfoApi;

   		int DEFAULT_TIMEOUT=30;
    		public MainActivityPresenter(MainActivity mainActivity) {//MainActivityPresenter的构造函数
        		this.mainActivity=mainActivity;

        		//进行创建ResponseApi,通过okHttpClient进行设置相关超时时间
        		OkHttpClient okHttpClient = new OkHttpClient.Builder()
                		.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                		.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                		.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
                		.build();//根据baseUrl,gson格式转换工厂,okHttpClient创建实例
        		responseInfoApi=new Retrofit.Builder().baseUrl(Constants.BASE_URL).//
                               addConverterFactory(GsonConverterFactory.create()).//
                               client(okHttpClient).build().create(ResponseInfoApi.class);
    	}

       4.3 构建模块层
               传入MainActivity实例,向外提供获取MainActivity,MainActivityPresenter实例的入口
         
	@Module
	public class MainActivityModule {
    	        private MainActivity mainActivity;

    	        public MainActivityModule(MainActivity mainActivity) {
	           this.mainActivity=mainActivity;
	        }

	        @Provides
                MainActivity provideMainActivity() {
                    return mainActivity;
                }

                @Provides
                MainActivityPresenter provideMainActivityPresenter() {
                    return new MainActivityPresenter(mainActivity);
                }
        }

       4.4 构建组件层
               结合@Component注解,创建in方法将MainActivity进行绑定!

              
       //通过接口创建实例的代码和目标实例进行关联在一起
       @Component(modules= MainActivityModule.class)
       public interface  MainActivityComponent {
         void in(MainActivity mainActivity);
       }

              4.5 在MainActivity层与组件成进行关联:
           
     DaggerMainActivityComponent daggerMainActivityComponent=
         (DaggerMainActivityComponent)DaggerMainActivityComponent.builder().mainActivityModule(n                           ew MainActivityModule(this)).build();
     daggerMainActivityComponent.in(this);


       具体的代码的链接:https://github.com/zhangyang520/Retrofit.git



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值