конструктор "имя" в классе "имя класса" не может быть применен к данным типам в библиотеке постоянства помещения - PullRequest
0 голосов
/ 13 января 2020

Я создаю класс сущности, используя аннотацию сущности базы данных помещения, как это:

@Entity(tableName = "dropbox_payload")
public class DropboxPayload {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    @NonNull
    private int id;

    @ColumnInfo(name = "tId")
    private String trialId;

    @TypeConverters(DeviceDetailsConverter.class)
    private DeviceDetails deviceDetails;

    @TypeConverters(ContentConverter.class)
    private Map<String, String> content;


    public DropboxPayload(String trialId, DeviceDetails deviceDetails, Map<String, String> content) {
        this.trialId = trialId;
        this.deviceDetails = deviceDetails;
        this.content = content;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTrialId() {
        return trialId;
    }

    public void setTrialId(String trialId) {
        this.trialId = trialId;
    }

    public DeviceDetails getDeviceDetails() {
        return deviceDetails;
    }

    public void setDeviceDetails(DeviceDetails devices) {
        this.deviceDetails = devices;
    }

    public Map<String, String> getContent() {
        return content;
    }

    public void setContent(Map<String, String> content) {
        this.content = content;
    }

    public static class DeviceDetailsConverter {

        @TypeConverter
        public String stringFromDeviceDetails(DeviceDetails value) {
            if (value == null) {
                return null;
            }
            String json = new Gson().toJson(value);
            return json;
        }

        @TypeConverter
        public DeviceDetails personFromString(String value) {
            if (value == null) {
                return new DeviceDetails();
            }
            Type type = new TypeToken<DeviceDetails>() {}.getType();
            DeviceDetails deviceDetails = new Gson().fromJson(value, type);
            return deviceDetails;
        }

    }
    public static class ContentConverter{

        @TypeConverter
        public String stringFromContent(Map content){
            if (content == null) {
                return null;
            }
            String json = new Gson().toJson(content);
            return json;
        }

        @TypeConverter
        public Map<String, String> contentFromString(String value) {
            if (value == null) {
                return null;
            }
            Type type = new TypeToken<Map<String, String>>() {}.getType();
            Map<String, String> content = new Gson().fromJson(value, type);
            return content;
        }

    }
}

Но когда я пытаюсь скомпилировать свой код, отображается это сообщение об ошибке:

error: constructor DropboxPayload в классе DropboxPayload нельзя применять к данным типам;

required: int,String,DeviceDetails,Map<String,String>
found: no arguments

причина: фактические и формальные списки аргументов различаются по длине

Я просто хочу получить класс Model без идентификатора, и вот почему Я создал конструктор без него. Кто-нибудь может объяснить, как это сделать?

1 Ответ

1 голос
/ 13 января 2020

Вы должны предоставить конструктор без аргументов, чтобы структура могла создавать экземпляр класса с помощью отражения. По умолчанию, если вы не предоставляете конструктор, неявно добавляется конструктор по умолчанию, но поскольку вы добавили свой собственный, вы должны добавить его явно.

public DropboxPayload() {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...