Как передать объект из одного действия в другое на Android

Вы можете использовать этот метод:

String.prototype.jsonToDate = function(){
    try{
        var date;
        eval(("date = new " + this).replace(/\//g,''));
        return date;
    } 
    catch(e){
        return new Date(0);
    }
};
702
задан Swati Garg 29 September 2017 в 17:24
поделиться

4 ответа

Одним из вариантов может быть предоставление вашему пользовательскому классу реализации интерфейса Serializable, и тогда вы сможете передавать экземпляры объектов в намерение extra, используя putExtra(Serializable...) вариант метода Intent#putExtra().

Псевдокод:

//To pass:
intent.putExtra("MyClass", obj);

// To retrieve object in second Activity
getIntent().getSerializableExtra("MyClass");

Примечание: Убедитесь, что каждый вложенный класс вашего главного пользовательского класса реализовал интерфейс Serializable, чтобы избежать исключений сериализации. Например:

class MainClass implements Serializable {

    public MainClass() {}

    public static class ChildClass implements Serializable {

        public ChildClass() {}
    }
}
842
ответ дан 22 November 2019 в 21:31
поделиться

Вы также можете записать данные объекта во временные строки и целые числа и передать их действию. Конечно, таким образом вы переносите данные, но не сам объект.

Но если вы просто хотите отобразить их, а не использовать объект в другом методе или что-то в этом роде, этого должно быть достаточно. Я сделал это так же, чтобы просто отобразить данные из одного объекта в другом действии.

String fName_temp   = yourObject.getFname();
String lName_temp   = yourObject.getLname();
String age_temp     = yourObject.getAge();
String address_temp = yourObject.getAddress();

Intent i = new Intent(this, ToClass.class);
i.putExtra("fname", fName_temp);
i.putExtra("lname", lName_temp);
i.putExtra("age", age_temp);
i.putExtra("address", address_temp);

startActivity(i);

Вы также можете передать их напрямую, а не temp ivars, но, на мой взгляд, так будет понятнее. Кроме того, вы можете установить временные ivars на null, чтобы они быстрее очищались GarbageCollector.

Удачи!

Попутно: переопределите toString () вместо написания собственного метода печати.

Как упоминалось в комментариях ниже, вот как вы можете вернуть свои данные в другом действии:

String fName = getIntent().getExtras().getInt("fname");
39
ответ дан 22 November 2019 в 21:31
поделиться

Лучший способ - иметь в вашем приложении класс (назовите его Control), который будет содержать статическую переменную типа «Клиент» (в вашем случае) . Инициализируйте переменную в вашем Activity A.

Например:

Control.Customer = CustomerClass;

Затем перейдите к Activity B и получите ее из класса Control. Не забудьте присвоить значение null после использования переменной, иначе память будет потрачена впустую.

15
ответ дан 22 November 2019 в 21:31
поделиться

Если вы выберете использование способа, описанного Саму, помните, что можно отправлять только примитивные значения. То есть значения, которые можно парсить. Итак, если ваш объект содержит сложные объекты, они не последуют. Например, такие переменные, как Bitmap, HashMap и т. Д. ... Их сложно передать с помощью намерения.

В общем, я бы посоветовал вам отправлять только примитивные типы данных в качестве дополнительных, например String, int, boolean и т. Д. В вашем случае это будет: String fname , String lname , int age и строковый адрес .

Мое мнение: для более сложных объектов лучше использовать ContentProvider , SDCard и т. Д. Также можно использовать статическую переменную , но это может быстро привести к коду, подверженному ошибкам ...

Но опять же, это всего лишь мое субъективное мнение.

12
ответ дан 22 November 2019 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: