安卓工作室 : Room: error: Cannot find getter for field

标签 android android-room

我正在使用房间数据库进行本地缓存。在我的实体内部,我还有其他对象,它们的 getter 具有与其用途相关的接口(interface)返回类型。然而,房间无法为这些领域找到 setter/getter 。我的目标是将这些接口(interface)用作返回类型,以便我可以将来自多个远程源的数据添加到一个数组中。我怎样才能做到这一点,同时实现灵活和良好的抽象?

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
}

最佳答案

由于我提出的问题以外的原因,我将 field 接口(interface)更改为抽象类:

来自

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: error: Cannot find getter for field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601785/

相关文章:

android - Room 2.1.0之后升级defaultValue迁移需求的困惑

java - 在不观察的情况下从房间中选择数据

android - 手动向 Android Vitals 报告崩溃

java - 错误 : Entities and Pojos must have a usable public constructor - Java

android - 在 Google Drive App 文件夹中存储房间数据库?

android - Facebook 权限审查问题和不同的 hashkey/google play 包名称

android - 屏幕锁定时当前 Activity 消失

android - (实例中缺少 Vulkan 1.0 API)通过 Android Studio 3.5 和 3.6 Canary 9 启动 Android Emulator(Q API 29)时

android - 使用 AppCompat v21 时何时将工具栏设置为操作栏?