【问题标题】:Subclassing a ParseObject Subclass (Android)子类化 ParseObject 子类 (Android)
【发布时间】:2015-07-28 16:48:30
【问题描述】:

是否可以继承ParseObjects 的子类?我遵循here 的指示。我的班级是这样的:

@ParseClassName("Stove")
public class Stove extends ParseObject{

  private String URL = "url";
  private String BRAND_NAME = "brand name";

  public Stove() {
    //Needed for Parse
  }

  public Stove(String url, String brandName) {
    put(URL, url);
    put(BRAND_NAME, brandName);
  }

  public String getUrl() {
    return getString(URL);
  }

  public String getBrandName() {
    return getString(BRAND_NAME);
  }
  ...
}

我有一个类似的子类

@ParseClassName("ElectricStove")
public class ElectricStove extends Stove{
  public ElectricStove() {
  }

  public ElectricStove(String url, String brandName) {
    super(url, brandName);
  }
  ...
}

我的应用程序子类在AndroidManifest.xml 中注册,并且在onCreate() 中有此代码:

ParseObject.registerSubclass(Stove.class);
ParseObject.registerSubclass(ElectricStove.class);
...
Parse.initialize(this, "<lots of letters>", "<more letters>");
ParseInstallation.getCurrentInstallation().saveInBackground();

我遇到了这个异常

Caused by: java.lang.IllegalArgumentException: You must register this ParseObject subclass before instantiating it.
at com.parse.ParseObject.<init>(ParseObject.java:363)
at com.parse.ParseObject.<init>(ParseObject.java:324)
at <package>.Stove.<init>(Stove.java:16)
at <package>.ElectricStove.<init>(ElectricStove.java:7)

这让我想知道我是否以错误的方式处理这件事,或者这可能根本不可能。

【问题讨论】:

    标签: java android parse-platform


    【解决方案1】:

    目前这是不可能的,因为 Parse Android SDK 不支持这一点。相反,作为建议,使用标识符来指定特定炉子对象是什么类型的“炉子”。举个例子:

    @ParseClassName("Instrument")
    public class Instrument extends ParseObject {
        public Instrument() {
        // A default constructor is required.
        }
    
        public InstrumentType getType() {
            return InstrumentType.parse(getString("type"));
        }
        public void setType(InstrumentType type) {
            put("type", type.toString());
        }
    

    然后使用:

    final Instrument ocarina = new Instrument();
    
    // Since our Instruments are strongly-typed, we can provide mutators that only take
    // specific types, such as Strings, ParseUsers, or enum types.
    ocarina.setType(InstrumentType.WOODWIND);
    

    这将是一种解决方法,允许您根据对象的类型对对象执行操作。它并不完美,但它可能适合您的需求。 InstrumentType 只是一个用于静态常量的类,以便访问 id 值

    示例取自here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多