Android Studio:Room:错误:找不到字段的吸气剂

时间:2019-10-29 05:19:21

标签: android android-room

我正在使用Room数据库进行本地缓存。在我的实体内部,我还有其他对象,这些对象的吸气剂具有与其用途相关的接口的返回类型。但是房间找不到适合该领域的吸气剂。我的目标是将这些接口用作返回类型,以便可以将数据从多个远程源添加到一个阵列中。在实现灵活,良好的抽象的同时该如何做?

public interface Venue {
  Location getLocation();
  Contact getContact();
}

public interface Location {
  double getLongitude();
  double getLatitude();
}

public interface Contact {
  String getPhoneNumber();
  String getFacebookUsername();
}

public class VenueSourceOne implements Venue{
   private VenueSourceOneLocation venueSourceOneLocation;
   private VenueSourceOneContact venueSourceOneContact;

   Location getLocation(){
      return venueSourceOneLocation;
   }

   Contact getContact(){
      return venueSourceOneContact
   }
}

public class VenueSourceTwo implements Venue{
   private VenueSourceTwoLocation venueSourceTwoLocation;
   private VenueSourceTwoContact venueSourceTwoContact;

   Location getLocation(){
      return venueSourceTwoLocation;
   }

   Contact getContact(){
      return venueSourceTwoContact
   }
}


public class Main{
   ....add to a List<Venue> and do something on the UI
}

1 个答案:

答案 0 :(得分:0)

如此简单的解决方案有点尴尬。除了我提出的问题外,我将场所界面更改为抽象类:

来自

public interface Venue {
  Location getLocation();
  Contact getContact();
}

public abstract class Venue {
      public abstract Location getLocation();
      public abstract Contact getContact();
}

解决我的问题的方法如下:

来自

public class VenueSourceOne implements Venue{
   private VenueSourceOneLocation venueSourceOneLocation;
   private VenueSourceOneContact venueSourceOneContact;

   Location getLocation(){
      return venueSourceOneLocation;
   }

   Contact getContact(){
      return venueSourceOneContact
   }
}

public class VenueSourceTwo implements Venue{
   private VenueSourceTwoLocation venueSourceTwoLocation;
   private VenueSourceTwoContact venueSourceTwoContact;

   Location getLocation(){
      return venueSourceTwoLocation;
   }

   Contact getContact(){
      return venueSourceTwoContact
   }
}

public class VenueSourceOne extends Venue{
   private VenueSourceOneLocation location;
   private VenueSourceOneContact contact;

   @Override
   VenueSourceOneLocation getLocation(){
      return location;
   }

   @Override
   VenueSourceOneContact getContact(){
      return contact;
   }
}

public class VenueSourceTwo extends Venue{
   private VenueSourceTwoLocation location;
   private VenueSourceTwoContact contact;

   @Override
   VenueSourceTwoLocation getLocation(){
      return location;
   }

   @Override
   VenueSourceTwoContact getContact(){
      return contact;
   }
}

从源中检索数据时,列表将使用抽象类指定的常规类型,而room将使用特定类型存储数据。