-
Notifications
You must be signed in to change notification settings - Fork 227
自定义解析规则
Half Stack edited this page Jul 20, 2017
·
6 revisions
Router
目前内置了4个Matcher
,每个用户的路由规则可能都不一样,完全可以添加自己的解析规则:
Router.registerMatcher(new CustomMatcher(int priority));
自定义的Matcher需要指定优先级(priority),优先级高的优先匹配。
Router
内置了一个SchemeMatcher
,如果配置如下路由:
@Route({"test", "http://example.com/user"})
public class TestActivity extends Activity {
...
}
除了可以通过Router.build("test").go(context)
打开TestActivity
之外,还可以通过Router.build("http://example.com/user").go(context)
打开,如果是Router.build("http://example.com/user?id=9527&status=0").go(context)
,不仅能打开页面,还帮你配置了Bundle,你可以从TestActivity
中获取参数:
@Route({"test", "http://example.com/user"})
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Bundle bundle = getIntent().getExtras();
String id = bundle.getString("id");
String status = bundle.getString("status");
}
}
注意:所有的参数都是String
类型,请自己转换为需要的数据类型。
可以看到,SchemeMatcher
是个非常棒的解析器,语义性更强,唯一的使用约束就是要使用规范的url串,包含scheme(http)、host:port(example.com)、path(/user,可选)、query(id=9527&status=0,可选)。只要格式正确,custom://abc
也可以使用SchemeMatcher
。
用户可以参考matcher包实现更符合自己业务规则的Matcher
。
Matcher
支持配置多个,会依次进行匹配。