记一次 使用ARouter 传been 或者Object,在接受 Object界面 为null 的情况

事先生成自己的实体类Entity_Test,并赋值 拿到Entity_Test实例  mdata。

 

1.传的界面 

//开始传值

ARouter.getInstance().build(AllPath_TEST).withObject("data",  mdata).navigation();

2.在收的界面

@Route(path = AllPath.TEST)
public class Activity_TestActivity extends BaseActivity {

    private TextView tv_textview;
    @Autowired(name = "data")//key
    Entity_Test getdata;//接收值

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test01);
       
   
        Log.e("我的测试数据",getdata.getData().get(1).getAnalysis()+"");
 

    }


}

到这里 你会拿不到值 ,或者闪退,你需要生成一个类,类名自己定义,实现SerializationService接口

//我用的是 Gson  所以生成后是这样的

@Route(path = "/service/json")//这里必须这样写,ARouter在你穿Object的时候会自己使用这个类,我们只管生成这个类
//因为实现了ARouter的SerializationService接口,我们自定义的对象即可不用写代码序列化而直接使用
public class been_impl implements SerializationService {
    Gson mGson;
    private void check(){
        if (mGson==null) {
            mGson = new Gson();
        }
    }
    @Override
    public <T> T json2Object(String input, Class<T> clazz) {
        check();
        return mGson.fromJson(input, clazz);
    }

    @Override
    public String object2Json(Object instance) {
        check();
        return mGson.toJson(instance);
    }

    @Override
    public <T> T parseObject(String input, Type clazz) {
        check();
        return mGson.fromJson(input, clazz);
    }

    @Override
    public void init(Context context) {
        check();
    }
}

 

最後 需要 在你的实体类里,对所有层级的对象提供一个构造方法

我的Entity_Test内 还嵌套了一层对象 DataBean ,内部的嵌套的对象 也需要提供 其构造方法

 

 最后的最后,实体类里的成员变量的方法名 必须是public

这样 你就可以拿到值了

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值