Подтвердить что ты не робот

Android: создание класса

Я хочу передать объект между двумя действиями в Android, который привел меня к разным классам. Я не пытаюсь преобразовать текущий класс, но не понимаю метод Parcelable.Creator.

Это то, что я до сих пор

public class Account implements Parcelable{

/**
 * Declare private variables
 */

private String fName;
private String lName;
private String screenName;
private String email;
private String level;
private int userId;
//private Context myContext;

/**
 * Account constructor
 */

public Account(String fName, String lName, String sName, String email, String level, String x) throws Exception{    


    /**Parse userId into int */
    this.userId = Integer.parseInt(x);

    /**Select from DB user details */


    /**Initialize variables with results */
    this.setfName(fName);
    this.setlName(lName);
    this.setScreenName(sName);
    this.setEmail(email);
    this.setLevel(level);



}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel out, int flags) {
    // TODO Auto-generated method stub
    out.writeString(fName);
    out.writeString(lName);
    out.writeString(screenName);
    out.writeString(email);
    out.writeString(level);
    out.writeInt(userId);

}

// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() {
    public Account createFromParcel(Parcel in) {
        return new Account(in);
    }

    public Account[] newArray(int size) {
        return new Account[size];
    }
};



/**
 * Getters and setters for all variables from Account class
 */

public int getUserId(){
    return userId;
}

public String getScreenName() {
    return screenName;
}

public void setScreenName(String screenName) {
    this.screenName = screenName;
}

public String getfName() {
    return fName;
}

public void setfName(String fName) {
    this.fName = fName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getLevel() {
    return level;
}

public void setLevel(String level) {
    this.level = level;
}

public String getlName() {
    return lName;
}

public void setlName(String lName) {
    this.lName = lName;
}



}

Спасибо заранее.

4b9b3361

Ответ 1

public static final Parcelable.Creator CREATOR =
    new Parcelable.Creator() {
        public ObjectB createFromParcel(Parcel in) {
            return new ObjectB(in);
        }

        public ObjectB[] newArray(int size) {
            return new ObjectB[size];
        }
    };

Это поле необходимо для того, чтобы Android мог создавать новые объекты отдельно или в виде массивов. Это также означает, что вы можете использовать конструктор по умолчанию для создания объекта и использовать другой метод для его hyrdate при необходимости.

Посмотрите на Android - Parcelable

Интерактивный инструмент для создания Parcelable class

и http://www.appance.com/tag/parcelable/

Ответ 3

Вот еще один инструмент для создания интересных объектов с использованием простых аннотаций

https://github.com/johncarl81/parceler

Ответ 4

В GitHub вы можете найти код, который я написал некоторое время назад для упрощения обработки Parcelables (например, запись и считывание с посылок, упрощая код инициализатора для CREATOR).

Запись на посылку:

parcelValues(dest, name, maxSpeed, weight, wheels, color, isDriving);

где цвет - это перечисление, а isDriving - это, например, булев.

Чтение с посылки:

// [...]
color = (CarColor)unparcelValue(CarColor.class.getClassLoader());
isDriving = (Boolean)unparcelValue();

Создание CREATOR для классов:

public static final Parcelable.Creator<Car> CREATOR = 
    Parceldroid.getCreatorForClass(Car.class);

... или для перечислений:

public static final Parcelable.Creator<CarColor> CREATOR = 
    Parceldroid.getCreatorForEnum(CarColor.class);

Просто взгляните на "ParceldroidExample", который я добавил в проект.

Ответ 5

Передача данных между действиями может выполняться с использованием сериализуемых, а также Parcelable. Но аргумент считается лучшим. (почему)

В андроиде есть плагин, который позволяет вставлять посыльный код для полей в классе. Вы можете найти его в меню "Файл" > "Настройки" > "Плагины" > условный генератор кода Android.

И используйте ярлык alt + insert, как getter и setter, чтобы использовать плагин.