依赖:
//*5.0新控件的依赖*//*
compile 'com.android.support:design:26.0.0-alpha1'
compile 'com.facebook.fresco:fresco:0.12.0'
//*RxJava与RxAndroid的依赖*//*
compile 'io.reactivex:rxandroid:1.0.1'
//*Retrofit与RxAndroid配置依赖*//*
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
//*使Retrofit的转化器自定义完成数据的转化
// 就是我们可以接口中少写一些bean类
//
compile 'com.squareup.retrofit2:converter-scalars:+'
retrofit的封装
[html] view plain copy
- public class RetrofitHelper {
- public static OkHttpClient okHttpClient;
- public static ApiService apiService;
- static {
- getOkHttpClient();
- }
- public static OkHttpClient getOkHttpClient(){
- if(okHttpClient == null){
- synchronized (OkHttpClient.class) {
- if(okHttpClient == null){
- File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");
- long fileSize = 10 * 1024 * 1024;
- okHttpClient = new OkHttpClient.Builder()
- .connectTimeout(15, TimeUnit.SECONDS)
- .readTimeout(15, TimeUnit.SECONDS)
- .writeTimeout(15, TimeUnit.SECONDS)
- .cache(new Cache(fileDir, fileSize))
- .build();
- }
- }
- }
- return okHttpClient;
- }
- public static ApiService getApiService(String url){
- if(apiService == null){
- synchronized (OkHttpClient.class) {
- apiService = createApiService(ApiService.class,url);
- }
- }
- return apiService;
- }
- private static <T>T createApiService(Class<T> tClass,String url) {
- T t = new Retrofit.Builder()
- .baseUrl(url)
- .client(okHttpClient)
- .addConverterFactory(ScalarsConverterFactory.create())
- .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
- .build()
- .create(tClass);
- return t;
- }
- private static class CommonParamsInterceptor implements Interceptor {
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request request = chain.request();
- String method = request.method();
- String oldUrl = request.url().toString();
- Log.e("---拦截器",request.url()+"---"+request.method()+"--"+request.header("User-agent"));
- Map<String,String> map = new HashMap<>();
- map.put("source","android");
- if ("GET".equals(method)){
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(oldUrl);
- if (oldUrl.contains("?")){
- if (oldUrl.indexOf("?") == oldUrl.length()-1){
- }else {
- stringBuilder.append("&");
- }
- }else {
- stringBuilder.append("?");
- }
- for (Map.Entry<String,String> entry: map.entrySet()) {
- stringBuilder.append(entry.getKey())
- .append("=")
- .append(entry.getValue())
- .append("&");
- }
- if (stringBuilder.indexOf("&") != -1){
- stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
- }
- String newUrl = stringBuilder.toString();
- request = request.newBuilder()
- .url(newUrl)
- .build();
- }else if ("POST".equals(method)){
- RequestBody oldRequestBody = request.body();
- if (oldRequestBody instanceof FormBody){
- FormBody oldBody = (FormBody) oldRequestBody;
- FormBody.Builder builder = new FormBody.Builder();
- for (int i=0;i<oldBody.size();i++){
- builder.add(oldBody.name(i),oldBody.value(i));
- }
- for (Map.Entry<String,String> entry:map.entrySet()) {
- builder.add(entry.getKey(),entry.getValue());
- }
- FormBody newBody = builder.build();
- request = request.newBuilder()
- .url(oldUrl)
- .post(newBody)
- .build();
- }
- }
- Response response = chain.proceed(request);
- return response;
- }
- }
- }
api的base_url的封装
[html] view plain copy
- public class Api {
- public static String BASE_URL="https://www.zhaoapi.cn/";
- }
接口
[html] view plain copy
- public interface ApiService {
- /**
- * Get基本请求,这里从Call改为Observable被观察者
- * @param url
- * @return
- */
- @GET
- public Observable<String> get(@Url String url);
- /**
- * Get请求提交表单
- * @param url
- * @param map
- * @return
- */
- @GET
- public Observable<String> get(@Url String url, @QueryMap Map<String,String> map);
- /**
- * Post请求提交表单
- * @param url
- * @param map
- * @return
- */
- @FormUrlEncoded
- @POST
- public Observable<String> post(@Url String url , @FieldMap Map<String,String> map);
- }
activity
[html] view plain copy
- public class MainActivity extends AppCompatActivity {
- private TextView tv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //获取控件
- tv = (TextView) findViewById(R.id.text_tv);
- //请求网络
- getData();
- }
- /*
- * 获取网络数据的方法
- * */
- private void getData() {
- // String url = Api.BASE_URL+"ad/getAd";
- RetrofitHelper.getApiService(Api.BASE_URL).get("ad/getAd")
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer<String>() {
- @Override
- public void onSubscribe(@NonNull Disposable d) {
- }
- @Override
- public void onNext(@NonNull String s) {
- tv.setText(s);
- }
- @Override
- public void onError(@NonNull Throwable e) {
- }
- @Override
- public void onComplete() {
- }
- });
- }
- }