Отправить объект в Bundle Android
У меня возникли некоторые проблемы при попытке передать объект, полученный из моего API, в конкретный фрагмент, этот объект является json из API, и он динамический, он может возвращать json как:
{
"number1" : "45545455",
"number2" : "58454556",
"email1" : "test@test.com",
"email2" : "test2@test2.com",
"name" : "Fett Shop",
"description" : "Big sales"
}
Этот json всегда меняется, поэтому он может прийти без номера 2 или электронной почты 2, или в качестве другого примера можно использовать третий или четвертый адрес электронной почты или номер. В моем методе 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 создание класса с Serialized или Parcelable, но я понятия не имею, как передать этот динамический объект другому фрагменту. Я ценю любую помощь!
3 ответа
@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();
Intent intent = new Intent("Calss A","Class B);
intent.putExtra("response", test2 );
goToContact();
}
}
Для получения объекта из комплекта
getIntent().getSerializableExtra("response");
Объекты можно передавать между фрагментом и операциями, делая класс модели 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");
вы можете передать один объект ответа в комплекте.
@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();
}
}
не передавать пакет во фрагмент.
YourFragment newFragment = новый YourFragment(); новыйFragment.setArguments (комплект);
получить данные, переданные во фрагменте.
Bundle b = getArguments();
String number1 = b.getString("number1");
String number2 = b.getString("number2");
String email1 = b.getString("email1");
String email2 = b.getString("email2");