【问题标题】:Exception: "No default Constructor provided" exception subclassing ParseObject异常:“未提供默认构造函数”异常子类化 ParseObject
【发布时间】:2014-09-19 10:42:03
【问题描述】:

我有两个类 NewsImageEventImage 几乎相同,因此它们继承自 Image 抽象类。这两个中的每一个都代表我 Parse 数据库中的一个类。

public abstract class Image extends ParseObject {

    public Image(){};

    public String getImageId(){
        return getObjectId();
    }

    public void setImageId(String imageId){
        setObjectId(imageId);
    }

    public byte[] getImageBytes(){
        try {
            return getParseFile("image").getData();
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }

    public void setImageBytes(byte[] bytes){
        put("image", new ParseFile(bytes));
    }

    public Bitmap getBitmap(){
        return Toolbox.ByteArrayToBitmap(getImageBytes());
    }

EventImage 类

    @ParseClassName("OSW_event_images")
    public class EventImage extends Image {

        public EventImage() {
            super();

        }

        public Event getEvent(){
            return (Event) getParseObject("event");
        }

        public void setEvent(Event event){
            put("event", event);
        }

    };

NewsImage 类

    @ParseClassName("OSW_news_images")
    public class NewsImage extends Image {

        public NewsImage() {
            super();

        }

        public News getNews(){
            return (News) getParseObject("news");
        }

        public void setNews(News event){
            put("news", event);
        }

    };

}

我在致电Parse.initialize()之前注册了这两个课程

ParseObject.registerSubclass(Image.EventImage.class);
ParseObject.registerSubclass(Image.NewsImage.class);

运行后我得到:

09-19 12:38:39.794: E/AndroidRuntime(25806): java.lang.RuntimeException: Unable to start activity ComponentInfo{pl.holdapp.osw/pl.holdapp.osw.activities.MainActivity}: java.lang.IllegalArgumentException: No default constructor provided for class pl.holdapp.osw.objects.Image$EventImage
09-19 12:38:39.794: E/AndroidRuntime(25806):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)

【问题讨论】:

  • 问题是 EventImage 不是静态嵌套类...没有外部 Image 类实例就不能存在...pl.holdapp.osw.objects.Image$EventImage

标签: java android oop inheritance parse-platform


【解决方案1】:

将 EventImage 类设为静态。由于现在是默认构造函数,因此需要隐式引用外部类。

【讨论】:

  • 最终,我将它们都从我的抽象 Image 类中剔除,但如果没有实例化 Image,这些类就无法存在,这当然是对的。
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多