Android:让一个类可以使用

Tru*_*eel 16 android

我想在Android中的两个活动之间传递对象,这引导我进入parcelable类.我不是要尝试转换我当前的类但不了解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;
}



}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

ing*_*sid 23

这是Android parcelable实现的一个很棒的工具.

达拉斯Gutauckis的Parcelabler

  • 该页面再次无效 (2认同)

use*_*305 11

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];
        }
    };
Run Code Online (Sandbox Code Playgroud)

Android需要此字段才能单独或作为数组创建新对象.这也意味着您可以使用默认构造函数来创建对象,并使用另一种方法根据需要对其进行修改.

看看这款Android - Parcelable

用于创建Parcelable类的在线工具

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

  • "Android需要这个字段才能创建新对象" - 但*当*? (2认同)

Gk *_*mon 6

您可以使用无硬编码方法轻松创建可打包类, Android studio 4.1.2可以在几秒钟内为您完成!

创建一个新的可分割类:

步骤1:Alt+Enter实现parcelable方法,对于windows和Option+Entermac都按writeToParcel第一次你会发现是空的 -

在此输入图像描述

步骤2:然后你会发现你的班级名称现在是红色的。因此,您需要添加CREATOR类并writeToParcel通过按Alt+EnterWindows 和Option+EnterMac 来填充空白 -

在此输入图像描述

最后,您将看到您的班级现在将是一个完全可分割的班级!

更新现有的可分割类:

步骤 1:如果您需要在现有类中添加一些新字段,那么您需要删除以前的方法和writeToParcel,并执行名为“创建新的 Parcelable 类”的第一部分中描述的相同步骤describeContentsCREATOR