【问题标题】:Send object in Bundle Android在 Bundle Android 中发送对象
【发布时间】:2017-07-01 02:42:55
【问题描述】:

我在尝试将从我的 api 接收到的对象传递给特定的 Fragment 时遇到了一些麻烦,这个对象是来自 API 的 json,它是动态的,它可以返回一个 json,如:

{ "number1" : "45545455", "number2" : "58454556", "email1" : "test@test.com", "email2" : "test2@test2.com", "name" : "Fett Shop", "description" : "Big sales" }

这个 json 总是在变化,所以它可以不带 number2 或 email2,或者另一个例子,它可以带有第三或第四个电子邮件或号码。 在我的 OnResponse 方法中,我得到响应并将其保存在对象中:

            @Override
        public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
            ServerResponse resp = response.body();


            if(resp.getResult().equals(Constants.SUCCESS)) {

                Object test2 = resp.getResponse();
                //In this part i was trying passing the object with Bundle
                goToContact();
            }
        }

我正在阅读传递一个 Bundle,创建一个具有序列化或 Parcelable 的类,但我不知道如何将这个动态对象传递给另一个片段。 感谢您的帮助!

【问题讨论】:

  • 一种解决方法是获取 json 对象并转换为字符串然后通过意图,但我猜它不是正确的方法
  • 那你有什么推荐的? @rookieDeveloper

标签: android object bundle retrofit2


【解决方案1】:

通过使模型类Serializable或Parcelable,可以在片段和活动之间传递对象。

@Override
        public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
            ServerResponse resp = response.body();


            if(resp.getResult().equals(Constants.SUCCESS)) {
                Fragment fragment = new Fragment();
                Object test2 = resp.getResponse();
                Bundle bundle = new Bundle();
                bundle.putParcelable("Object", test2 );
                fragment.setArguments(bundle); 
            }
        }

要从另一个片段中的捆绑包中获取它,请在 onCreate 函数中使用:

Object newObject = (NewObject) bundle.getParcelable("Object");

【讨论】:

  • 问题是我没有使用模型类,因为我不知道API的json中有多少数据
【解决方案2】:

您可以在包中传递单个响应对象。

@Override
    public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
        ServerResponse resp = response.body();


        if(resp.getResult().equals(Constants.SUCCESS)) {

            Object test2 = resp.getResponse();
            //In this part i was trying passing the object with Bundle
            Bundle bundle = new Bundle();
            bundle.putString("number1", test2.getString("number1");
            bundle.putString("number2", test2.getString("number2");
            bundle.putString("email1", test2.getString("email1");
            bundle.putString("email2", test2.getString("email2");
            goToContact();
        }
    }

不在 Fragment 中传递捆绑包。

YourFragment newFragment = new YourFragment(); newFragment.setArguments(bundle);

获取 Fragment 中传递的数据。

Bundle b = getArguments();
String number1 = b.getString("number1");
String number2 = b.getString("number2");
String email1 = b.getString("email1");
String email2 = b.getString("email2");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多