在ARouter的github上,最初還以爲是實現SerializationService這個類,其實不是。是單獨寫一個類實現它,代碼如下:
/** * Author: meizivskai * Time: 2020-01-01 * Description: This is JsonServiceImpl */ @Route(path = "/service/json") public class JsonServiceImpl implements SerializationService { @Override public void init(Context context) { } @Override public <T> T json2Object(String text, Class<T> clazz) { return JSON.parseObject(text, clazz); } @Override public String object2Json(Object instance) { return JSON.toJSONString(instance); } @Override public <T> T parseObject(String input, Type clazz) { return JSON.parseObject(input, clazz); } }
自定義的實體,不能序列化,否則取不到值。我的自定義對象:
/** * Author: meizivskai * Time: 2019-12-12 * Description: This is TrueFalse */ public class TrueFalse { public int mQuestion; public boolean mTrueQuestion; public TrueFalse() { } public TrueFalse(int question, boolean trueQuestion) { this.mQuestion = question; this.mTrueQuestion = trueQuestion; } public int getmQuestion() { return mQuestion; } public TrueFalse setmQuestion(int mQuestion) { this.mQuestion = mQuestion; return this; } public boolean ismTrueQuestion() { return mTrueQuestion; } public TrueFalse setmTrueQuestion(boolean mTrueQuestion) { this.mTrueQuestion = mTrueQuestion; return this; } @Override public String toString() { return "TrueFalse{" + "mQuestion=" + mQuestion + ", mTrueQuestion=" + mTrueQuestion + '}'; } }
需要注意的是實體中,要寫無參的構造方法,屬性是公開權限public。
點擊跳轉:
mFalseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final TrueFalse trueFalse = new TrueFalse(100, false); ARouter.getInstance().build(Constant.PATH_SECOND) .withObject("trueFalse", trueFalse) .navigation(MainActivity.this, new NavigationCallback() { @Override public void onFound(Postcard postcard) { Log.e("router", "onFound: " + postcard.getPath()); } @Override public void onLost(Postcard postcard) { Log.e("router", "onLost: " + postcard.getPath()); } @Override public void onArrival(Postcard postcard) { Log.e("router", "onArrival: " + postcard.getPath()); } @Override public void onInterrupt(Postcard postcard) { Log.e("router", "onInterrupt: " + postcard.getPath()); } }); } });
界面接受值:
/** * Author: meizivskai * Time: 2020-01-01 * Description: This is FirstActivity */ @Route(path = Constant.PATH_SECOND) public class SecondActivity extends BaseActivity { @Autowired TrueFalse trueFalse; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Log.e("router", "onCreate: " + trueFalse); } }
BaseActivity裏面要注入下:
/** * Author: meizivskai * Time: 2020-01-01 * Description: This is BaseActivity */ public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ARouter.getInstance().inject(this); } }
結果就可以取到值了:
終結下:
1.實體中成員變量最好寫成public
2.實體要寫無參的構造方法
3.實體不能被序列化
4.寫一個實現了SerializationService的類