Android 架構之隔離層設計(實現一鍵切換主流網絡框架)下

前言

上一篇中,咱們講解了如何實現一句代碼隨意切換主流網絡框架,以及 Hilt的基本使用 。 在本篇中,咱們將會把這倆者相結合,打形成一個 能經過Hilt 快速 切換主流網絡框架的例子。java

準備工做

  1. 在開始以前,咱們需先下載 以前已寫好的 能快速切換主流框架的demogit

  2. Hilt的集成參考:Hilt的基本使用github

回顧隔離層設計思路

當時咱們將App看做是客戶,各類主流框架看做成不一樣的業主,而隔離層看做成對應的房產公司以及對應的中介。 而本篇所打造的快速切換主流網絡框架的例子,將會重點打造隔離層裏面的中介。markdown

開始改造框架

一、集成Hilt

集成參考:Hilt的基本使用網絡

二、開除以前的中介

註釋或者刪掉 關於 HttpHelper 的全部信息。在本篇中,該中介不符合房產公司要求,直接開除。框架

三、新增對應業主的聯繫方式

  • Okhttp
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface BindOkhttp {
}
複製代碼
  • Volley
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface BindVolley {
}
複製代碼
  • XUtils
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface BindXUtils {

}
複製代碼

四、房產公司招納新中介

建立 HttpProcessorModule 類,並注入實現不一樣的網絡框架ide

@Module
@InstallIn(ApplicationComponent.class)
public abstract class HttpProcessorModule {

    @BindOkhttp
    @Binds
    @Singleton
    abstract IHttpProcessor bindOkhttp(OkHttpProcessor okHttpProcessor);


    @BindVolley
    @Binds
    @Singleton
    abstract IHttpProcessor bindVolley(VolleyProcessor volleyProcessor);

    @BindXUtils
    @Binds
    @Singleton
    abstract IHttpProcessor bindXUtils(XUtilsProcessor xUtilsProcessor);
}
複製代碼

五、客戶聯繫新中介

@HiltAndroidApp
public class MyApplication extends Application {
	// 只須要 在這切換不一樣的註解,就能實現快速切換網絡框架
    @BindOkhttp // @BindVolley // @BindXUtils 
    @Inject
    IHttpProcessor iHttpProcessor;

    public IHttpProcessor getiHttpProcessor() {
        return iHttpProcessor;
    }
}
複製代碼

六、客戶開始買房/租房

@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {

    IHttpProcessor iHttpProcessor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //拿到Application 對應的網絡框架
        iHttpProcessor=((MyApplication)getApplication()).getiHttpProcessor();
    }

    public void click(View view) {
        String url="https://v.juhe.cn/historyWeather/citys";
        HashMap<String,Object> params=new HashMap<>();
        //https://v.juhe.cn/historyWeather/citys?&province_id=2&key=bb52107206585ab074f5e59a8c73875b
        params.put("province_id","2");
        params.put("key","bb52107206585ab074f5e59a8c73875b");

        iHttpProcessor.post(url, params, new HttpCallback<ResponceData>() {
            @Override
            public void onSuccess(ResponceData objResult) {
                Toast.makeText(MainActivity.this, objResult.getResultcode(), Toast.LENGTH_SHORT).show();
            }
        });
        

    }
}

複製代碼

到這,本篇大概差很少就結束了,是否是很簡單哇?oop

Demo地址:點我下載

相關文章
相關標籤/搜索