Skip to content

自定义解析规则

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支持配置多个,会依次进行匹配。

Clone this wiki locally