Skip to content

Commit f11fb76

Browse files
authored
Merge pull request #58 from alibaba/develop
Add object autowired support.
2 parents 46ab72c + b8fc9c7 commit f11fb76

22 files changed

Lines changed: 364 additions & 95 deletions

File tree

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
##### [Demo apk下载](http://public.cdn.zhilong.me/app-debug.apk)[Demo Gif](https://raw.githubusercontent.com/alibaba/ARouter/master/demo/arouter-demo.gif)
2020

2121
#### 一、功能介绍
22-
1. **支持直接解析标准URL进行跳转,并自动解析参数注入**
22+
1. **支持直接解析标准URL进行跳转,并自动注入参数到目标页面中**
2323
2. **支持多模块工程使用**
2424
3. **支持添加多个拦截器,自定义拦截顺序**
2525
4. **支持依赖注入,可单独作为依赖注入框架使用**
@@ -50,8 +50,10 @@
5050
}
5151

5252
dependencies {
53+
// 替换成最新版本, 需要注意的是api
54+
// 要与compiler匹配使用,均使用最新版可以保证兼容
5355
compile 'com.alibaba:arouter-api:x.x.x'
54-
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x' // 替换成最新版本
56+
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
5557
...
5658
}
5759
// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
@@ -82,6 +84,7 @@
8284
ARouter.getInstance().build("/test/1")
8385
.withLong("key1", 666L)
8486
.withString("key3", "888")
87+
.withObject("key4", new Test("Jack", "Rose"))
8588
.navigation();
8689

8790
5. 添加混淆规则(如果使用了Proguard)
@@ -122,6 +125,7 @@
122125
2. 解析URL中的参数
123126

124127
// 为每一个参数声明一个字段,并使用 @Autowired 标注
128+
// URL中不能传递Parcelable类型数据,通过ARouter api可以传递Parcelable对象
125129
@Route(path = "/test/activity")
126130
public class Test1Activity extends Activity {
127131
@Autowired
@@ -130,6 +134,8 @@
130134
int age;
131135
@Autowired(name = "girl") // 通过name来映射URL中的不同参数
132136
boolean boy;
137+
@Autowired
138+
TestObj obj; // 支持解析自定义对象,URL中使用json传递
133139

134140
@Override
135141
protected void onCreate(Bundle savedInstanceState) {
@@ -290,6 +296,11 @@
290296
.build("/home/main")
291297
.withFlags();
292298
.navigation();
299+
300+
// 对象传递
301+
ARouter.getInstance()
302+
.withObject("key", new TestObj("Jack", "Rose"))
303+
.navigation();
293304

294305
// 觉得接口不够多,可以直接拿出Bundle赋值
295306
ARouter.getInstance()

README_CN.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
##### [Demo apk下载](http://public.cdn.zhilong.me/app-debug.apk)[Demo Gif](https://raw.githubusercontent.com/alibaba/ARouter/master/demo/arouter-demo.gif)
1818

1919
#### 一、功能介绍
20-
1. **支持直接解析标准URL进行跳转,并自动解析参数注入**
20+
1. **支持直接解析标准URL进行跳转,并自动注入参数到目标页面中**
2121
2. **支持多模块工程使用**
2222
3. **支持添加多个拦截器,自定义拦截顺序**
2323
4. **支持依赖注入,可单独作为依赖注入框架使用**
@@ -48,8 +48,10 @@
4848
}
4949

5050
dependencies {
51+
// 替换成最新版本, 需要注意的是api
52+
// 要与compiler匹配使用,均使用最新版可以保证兼容
5153
compile 'com.alibaba:arouter-api:x.x.x'
52-
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x' // 替换成最新版本
54+
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
5355
...
5456
}
5557
// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
@@ -80,6 +82,7 @@
8082
ARouter.getInstance().build("/test/1")
8183
.withLong("key1", 666L)
8284
.withString("key3", "888")
85+
.withObject("key4", new Test("Jack", "Rose"))
8386
.navigation();
8487

8588
5. 添加混淆规则(如果使用了Proguard)
@@ -120,6 +123,7 @@
120123
2. 解析URL中的参数
121124

122125
// 为每一个参数声明一个字段,并使用 @Autowired 标注
126+
// URL中不能传递Parcelable类型数据,通过ARouter api可以传递Parcelable对象
123127
@Route(path = "/test/activity")
124128
public class Test1Activity extends Activity {
125129
@Autowired
@@ -128,6 +132,8 @@
128132
int age;
129133
@Autowired(name = "girl") // 通过name来映射URL中的不同参数
130134
boolean boy;
135+
@Autowired
136+
TestObj obj; // 支持解析自定义对象,URL中使用json传递
131137

132138
@Override
133139
protected void onCreate(Bundle savedInstanceState) {
@@ -288,6 +294,11 @@
288294
.build("/home/main")
289295
.withFlags();
290296
.navigation();
297+
298+
// 对象传递
299+
ARouter.getInstance()
300+
.withObject("key", new TestObj("Jack", "Rose"))
301+
.navigation();
291302

292303
// 觉得接口不够多,可以直接拿出Bundle赋值
293304
ARouter.getInstance()

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
android:icon="@drawable/ic_launcher"
88
android:label="ARouter demo"
99
android:theme="@style/Base.Theme.AppCompat">
10-
<activity android:name=".SchameFilterActivity">
10+
<activity android:name=".SchemeFilterActivity">
1111

1212
<!-- Schame -->
1313
<intent-filter>

app/src/main/assets/schame-test.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99

1010
<h2>跳转测试</h2>
1111

12-
<h2>自定义Schame[通常来说都是这样的]</h2>
12+
<h2>自定义Scheme[通常来说都是这样的]</h2>
1313
<p><a href="arouter://m.aliyun.com/test/activity1">arouter://m.aliyun.com/test/activity1</a></p>
1414
<p><a href="arouter://m.aliyun.com/test/activity1?url=https%3a%2f%2fm.abc.com%3fa%3db%26c%3dd">测试URL Encode情况</a></p>
15-
<p><a href="arouter://m.aliyun.com/test/activity1?name=alex&age=18&boy=true&high=180">arouter://m.aliyun.com/test/activity1?name=alex&age=18&boy=true&high=180</a></p>
15+
<p><a href="arouter://m.aliyun.com/test/activity1?name=alex&age=18&boy=true&high=180&obj=%7b%22name%22%3a%22jack%22%2c%22id%22%3a666%7d">arouter://m.aliyun.com/test/activity1?name=alex&age=18&boy=true&high=180&obj={"name":"jack","id":"666"}</a></p>
1616
<p><a href="arouter://m.aliyun.com/test/activity2">arouter://m.aliyun.com/test/activity2</a></p>
1717
<p><a href="arouter://m.aliyun.com/test/activity2?key1=value1">arouter://m.aliyun.com/test/activity2?key1=value1</a></p>
18-
<p><a href="arouter://m.aliyun.com/test/activity3?name=alex&age=18&boy=true&high=180">(需要开启自动注入)arouter://m.aliyun.com/test/activity3?name=alex&age=18&boy=true&high=180</a></p>
18+
<p><a href="arouter://m.aliyun.com/test/activity3?name=alex&age=18&boy=true&high=180">arouter://m.aliyun.com/test/activity3?name=alex&age=18&boy=true&high=180</a></p>
1919

2020
<h2>App Links[防止被App屏蔽]</h2>
2121
<p><a href="http://m.aliyun.com/test/activity1">http://m.aliyun.com/test/activity1</a></p>

app/src/main/java/com/alibaba/android/arouter/demo/MainActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import android.util.Log;
88
import android.view.View;
99

10+
import com.alibaba.android.arouter.demo.testinject.TestObj;
11+
import com.alibaba.android.arouter.demo.testinject.TestParcelable;
1012
import com.alibaba.android.arouter.demo.testservice.HelloService;
1113
import com.alibaba.android.arouter.facade.Postcard;
1214
import com.alibaba.android.arouter.facade.callback.NavigationCallback;
@@ -74,12 +76,17 @@ public void onClick(View v) {
7476
.navigation();
7577
break;
7678
case R.id.autoInject:
79+
TestParcelable testParcelable = new TestParcelable("jack", 666);
80+
TestObj testObj = new TestObj("Rose", 777);
81+
7782
ARouter.getInstance().build("/test/activity1")
7883
.withString("name", "老王")
7984
.withInt("age", 18)
8085
.withBoolean("boy", true)
8186
.withLong("high", 180)
8287
.withString("url", "https://a.b.c")
88+
.withParcelable("pac", testParcelable)
89+
.withObject("obj", testObj)
8390
.navigation();
8491
break;
8592
case R.id.navByName:

app/src/main/java/com/alibaba/android/arouter/demo/SchameFilterActivity.java renamed to app/src/main/java/com/alibaba/android/arouter/demo/SchemeFilterActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.alibaba.android.arouter.facade.callback.NavigationCallback;
99
import com.alibaba.android.arouter.launcher.ARouter;
1010

11-
public class SchameFilterActivity extends Activity {
11+
public class SchemeFilterActivity extends Activity {
1212

1313
@Override
1414
protected void onCreate(Bundle savedInstanceState) {

app/src/main/java/com/alibaba/android/arouter/demo/testactivity/Test1Activity.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import android.widget.TextView;
66

77
import com.alibaba.android.arouter.demo.R;
8+
import com.alibaba.android.arouter.demo.testinject.TestObj;
9+
import com.alibaba.android.arouter.demo.testinject.TestParcelable;
810
import com.alibaba.android.arouter.demo.testservice.HelloService;
911
import com.alibaba.android.arouter.facade.annotation.Autowired;
1012
import com.alibaba.android.arouter.facade.annotation.Route;
@@ -25,6 +27,12 @@ public class Test1Activity extends AppCompatActivity {
2527
@Autowired(name = "boy")
2628
boolean girl;
2729

30+
@Autowired
31+
TestParcelable pac;
32+
33+
@Autowired
34+
TestObj obj;
35+
2836
private long high;
2937

3038
@Autowired
@@ -47,7 +55,16 @@ protected void onCreate(Bundle savedInstanceState) {
4755
// high = getIntent().getLongExtra("high", 0);
4856
// url = getIntent().getStringExtra("url");
4957

50-
String params = String.format("name=%s, age=%s, girl=%s, high=%s, url=%s", name, age, girl, high, url);
58+
String params = String.format(
59+
"name=%s,\n age=%s,\n girl=%s,\n high=%s,\n url=%s,\n pac=%s,\n obj=%s",
60+
name,
61+
age,
62+
girl,
63+
high,
64+
url,
65+
pac,
66+
obj
67+
);
5168
helloService.sayHello("Hello moto.");
5269

5370
((TextView)findViewById(R.id.test)).setText("I am " + Test1Activity.class.getName());
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.alibaba.android.arouter.demo.testinject;
2+
3+
/**
4+
* TODO:Feature
5+
*
6+
* @author zhilong <a href="mailto:zhilong.lzl@alibaba-inc.com">Contact me.</a>
7+
* @version 1.0
8+
* @since 2017/3/16 下午4:42
9+
*/
10+
public class TestObj {
11+
public String name;
12+
public int id;
13+
14+
public TestObj() {
15+
}
16+
17+
public TestObj(String name, int id) {
18+
this.name = name;
19+
this.id = id;
20+
}
21+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.alibaba.android.arouter.demo.testinject;
2+
3+
import android.os.Parcel;
4+
import android.os.Parcelable;
5+
6+
/**
7+
* TODO:Feature
8+
*
9+
* @author zhilong <a href="mailto:zhilong.lzl@alibaba-inc.com">Contact me.</a>
10+
* @version 1.0
11+
* @since 2017/3/16 下午4:42
12+
*/
13+
public class TestParcelable implements Parcelable {
14+
public String name;
15+
public int id;
16+
17+
public TestParcelable() {
18+
}
19+
20+
public TestParcelable(String name, int id) {
21+
this.name = name;
22+
this.id = id;
23+
}
24+
25+
protected TestParcelable(Parcel in) {
26+
name = in.readString();
27+
id = in.readInt();
28+
}
29+
30+
@Override
31+
public void writeToParcel(Parcel dest, int flags) {
32+
dest.writeString(name);
33+
dest.writeInt(id);
34+
}
35+
36+
@Override
37+
public int describeContents() {
38+
return 0;
39+
}
40+
41+
public static final Creator<TestParcelable> CREATOR = new Creator<TestParcelable>() {
42+
@Override
43+
public TestParcelable createFromParcel(Parcel in) {
44+
return new TestParcelable(in);
45+
}
46+
47+
@Override
48+
public TestParcelable[] newArray(int size) {
49+
return new TestParcelable[size];
50+
}
51+
};
52+
}

arouter-annotation/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ext {
55
artifact = bintrayName
66
libraryName = 'ARouter annotation'
77
libraryDescription = 'The annotation used in arouter api'
8-
libraryVersion = '1.0.2'
8+
libraryVersion = arouter_annotation_version
99
}
1010

1111
compileJava {

0 commit comments

Comments
 (0)