在Bundle Android

时间:2017-07-01 02:42:56

标签: android object bundle retrofit2

我有一些麻烦试图将从我的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创建一个带有Seri​​alized或Parcelable的类,但我不知道如何将这个动态Object传递给另一个Fragment。 我感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

通过使模型类Serializable或Parcelable可以在fragment和Activities之间传递对象。

@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函数中使用另一个片段中的bundle来获取它:

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

答案 1 :(得分:0)

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

@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 中传递 bundle。

<块引用>

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");