Skip to content

Commit

Permalink
Add onUrlChangeListener#onUrlChangeBefore(HttpUrl, String)
Browse files Browse the repository at this point in the history
  • Loading branch information
JessYanCoding committed Sep 27, 2017
1 parent d0fdb32 commit b2863ef
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,14 @@ protected void onDestroy() {
private class ChangeListener implements onUrlChangeListener {

@Override
public void onUrlChange(final HttpUrl newUrl, HttpUrl oldUrl) {
public void onUrlChangeBefore(HttpUrl oldUrl, String domainName) {
Log.d("MainActivity", String.format("The oldUrl is <%s>, ready fetch <%s> from DomainNameHub",
oldUrl.toString(),
domainName));
}

@Override
public void onUrlChanged(final HttpUrl newUrl, HttpUrl oldUrl) {
Observable.just(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Object>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ public interface OneApiService {
// 切换 Url 的优先级: DomainHeader 中的将覆盖全局的 BaseUrl
// 这里不配置 DomainHeader,将只受到设置的全局 BaseUrl 的影响,没有全局 BaseUrl 将请求原始的 BaseUrl
// 当你项目中只有一个 BaseUrl ,但需要动态改变,全局 BaseUrl 显得非常方便
@GET("/okhttp-progress")// 这里随便写一个,just for test
@GET("/BaseUrl-Solution")// 这里随便写一个,just for test
Observable<ResponseBody> requestDefault();
}
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="Retrofit : 1 BaseUrl : 3" />
android:text="Retrofit : 1 BaseUrl : 4" />

<LinearLayout
android:layout_width="match_parent"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,22 +98,25 @@ public Request processRequest(Request request) {

HttpUrl httpUrl;

// 如果有 header,获取 header 中配置的url,否则检查全局的 BaseUrl,未找到则为null
Object[] listeners = listenersToArray();

// 如果有 header,获取 header 中 domainName 所映射的 url,若没有,则检查全局的 BaseUrl,未找到则为null
if (!TextUtils.isEmpty(domainName)) {
notifyListener(request, domainName, listeners);
httpUrl = fetchDomain(domainName);
newBuilder.removeHeader(DOMAIN_NAME);
} else {
notifyListener(request, GLOBAL_DOMAIN_NAME, listeners);
httpUrl = fetchDomain(GLOBAL_DOMAIN_NAME);
}

if (null != httpUrl) {
HttpUrl newUrl = mUrlParser.parseUrl(httpUrl, request.url());
Log.d(RetrofitUrlManager.TAG, "New Url is { " + newUrl.toString() + " } , Old Url is { " + request.url().toString() + " }");

Object[] listeners = listenersToArray();
if (listeners != null) {
for (int i = 0; i < listeners.length; i++) {
((onUrlChangeListener) listeners[i]).onUrlChange(newUrl, request.url()); // 通知监听器此 Url 的 BaseUrl 已被改变
((onUrlChangeListener) listeners[i]).onUrlChanged(newUrl, request.url()); // 通知监听器此 Url 的 BaseUrl 已被改变
}
}

Expand All @@ -126,6 +129,14 @@ public Request processRequest(Request request) {

}

private void notifyListener(Request request, String domainName, Object[] listeners) {
if (listeners != null) {
for (int i = 0; i < listeners.length; i++) {
((onUrlChangeListener) listeners[i]).onUrlChangeBefore(request.url(),domainName);
}
}
}

/**
* 管理器是否在运行
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,26 @@
* Created by jess on 20/07/2017 14:18
* Contact with jess.yan.effort@gmail.com
*/

public interface onUrlChangeListener {

/**
* 此方法在框架使用 {@code domainName} 作为 key,从 {@link RetrofitUrlManager#mDomainNameHub}
* 中取出对应的 BaseUrl 构建新的 Url 之前会被调用
* <p>
* 可以使用此回调确保 {@link RetrofitUrlManager#mDomainNameHub} 中是否已经存在自己期望的 BaseUrl
* 如果不存在可以在此方法中进行 {@code put}
*
* @param oldUrl
* @param domainName
*/
void onUrlChangeBefore(HttpUrl oldUrl, String domainName);

/**
* 当 Url 的 BaseUrl 被改变时回调
* 调用时间是在接口请求服务器之前
*
* @param newUrl
* @param oldUrl
*/
void onUrlChange(HttpUrl newUrl, HttpUrl oldUrl);
void onUrlChanged(HttpUrl newUrl, HttpUrl oldUrl);
}

0 comments on commit b2863ef

Please sign in to comment.