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的类

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ARouter 是一个用于实现组件化、模块化开发的路由框架,它提供了一种简单的方式来实现不同组件之间的跳转和通信。 使用 ARouter 的步骤如下: 1. 在项目的 build.gradle 文件中添加依赖: ```groovy implementation 'com.alibaba:arouter-api:x.x.x' annotationProcessor 'com.alibaba:arouter-compiler:x.x.x' ``` 请将 `x.x.x` 替换为最新的版本号。 2. 在需要使用 ARouter 的模块中,创建一个类似于 Application 的类,并在其 `onCreate()` 方法中进行 ARouter 的初始化: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); if (BuildConfig.DEBUG) { ARouter.openLog(); ARouter.openDebug(); } ARouter.init(this); } } ``` 3. 在需要跳转到的目标页面中,使用 `@Route` 注解进行标记,以便 ARouter 进行识别: ```java @Route(path = "/path/to/target") public class TargetActivity extends AppCompatActivity { // ... } ``` 4. 在需要跳转的地方,通过调用 `ARouter.getInstance().build("/path/to/target").navigation()` 来实现页面跳转: ```java ARouter.getInstance().build("/path/to/target").navigation(); ``` 5. 如果需要传递参数,可以使用 `withXxx` 方法来添加参数: ```java ARouter.getInstance() .build("/path/to/target") .withString("key", "value") .navigation(); ``` 通过以上步骤,你就可以在 Android 项目中使用 ARouter 进行页面跳转和参数传递了。当然,ARouter 还提供了其他功能,比如拦截器、URI 跳转等,你可以根据具体需求进行使用。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值