【问题标题】:How can I map two models from different data sources?如何映射来自不同数据源的两个模型?
【发布时间】:2018-07-26 08:10:18
【问题描述】:

我目前正在开发的项目中遇到问题。

我一直在按功能结构对我的类进行分组,这基本上是我的结构:

 - data 
 - local 
  - model 
   - LocalModel.java
 - remote 
  - model
   - RemoteModel.java  
 - ui 
  - features 

两个模型包含完全相同的属性, 即:

RemoteModel.java

public class RemoteModel implements Parcelable {
   private String name; //has getter and setter
   ...
}

LocalModel.java

public class LocalModel implements Parcelable {
   private String name; //has getter and setter
   ...
}

在功能包下,我有一个 Activity 用于显示模型的详细信息。问题是,可以开始 Activity 持有 RemoteModel 或 LocalModel 对象。但是,作为该 Activity 属性的一部分,它只有一个 RemoteModel 属性,如下所示:

public class DetailsActivity extends AppCompartActivity {
   ...
   private TextView mName;
   private RemoteModel mRemoteModel;
   ...

   public void onCreate(Bundle savedInstanceState) {
      ...
      mRemoteModel = getIntent().getExtras().getParcelable(EXTRA_RESULT_TITLE);
      ...
      mName.setText(mRemoteModel.getName());
   }
}

这样它工作正常,直到我运行应用程序,然后点击查看详细信息按钮,然后出现以下美丽错误:

java.lang.ClassCastException: com.carlosparra.myApp.data.local.model.LocalModel cannot be cast to com.carlosparra.moviestvtracker.moviesandtvshowstracker.data.remote.model.RemoteModel

我知道错误的含义,所以我想知道如何将这两个类从不同数据源映射到一个共享对象中,然后我可以将其传递给详细信息 Activity。

【问题讨论】:

  • 这些类的方法比Parcelable多吗?
  • @jhamon nope,只是 Parcelable 实现及其 getter 和 setter 附带的那些
  • Parcelable 中设置getter/setter 并将mRemoteModel 设置为Parcelable 而不是RemoteModel
  • 嗯,没有关注“在Parcelable 中有getter/setter”。你能给我一个简短的例子吗?在高级感谢
  • @Carlos 请尝试为这两个功能创建通用模型,无需创建单独的模型。

标签: java android mapping retrofit android-room


【解决方案1】:

可以在接口Parcelable中定义必要的getter和setter:

public interface Parcelable {

    String getName();

}

然后,您不会在活动中获得RemoteModel,而是获得Parcelable 对象:

public class DetailsActivity extends AppCompartActivity {
   ...
   private TextView mName;
   private Parcelable mParcelable;
   ...

   public void onCreate(Bundle savedInstanceState) {
      ...
      mParcelable = getIntent().getExtras().getParcelable(EXTRA_RESULT_TITLE);
      ...
      mName.setText(mParcelable.getName());
   }
}

【讨论】:

    猜你喜欢
    • 2018-09-28
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多