Android ARouter路由中傳對象遇到的坑

在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的類

發佈了29 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章