使用改装2.0+;RxJava+;领域+;RecyclerView不将数据保存到数据库中
我对android和第三方库还很陌生,所以我有一个问题。 我想将来自RESTAPI的一些数据存储到领域中,然后将其显示到RecyclerView中。我有三个标签使用相同的recyclerView,所以它可以显示三种不同的状态。 以下是我的课程:使用改装2.0+;RxJava+;领域+;RecyclerView不将数据保存到数据库中,java,android,realm,rx-java,retrofit2,Java,Android,Realm,Rx Java,Retrofit2,我对android和第三方库还很陌生,所以我有一个问题。 我想将来自RESTAPI的一些数据存储到领域中,然后将其显示到RecyclerView中。我有三个标签使用相同的recyclerView,所以它可以显示三种不同的状态。 以下是我的课程: public class RealmContentAdapter extends RealmRecyclerViewAdapter<ContentDataModel, RealmContentAdapter.ViewHolder> { pri
public class RealmContentAdapter extends RealmRecyclerViewAdapter<ContentDataModel, RealmContentAdapter.ViewHolder> {
private Context mContext;
public static class ViewHolder extends RecyclerView.ViewHolder{
private ImageView cardIcon;
private TextView likeCounter, cardHeader, cardAddress, cardDate, cardDays;
public ViewHolder(View itemView) {
super(itemView);
this.cardIcon = (ImageView) itemView.findViewById(R.id.card_icon);
this.likeCounter = (TextView) itemView.findViewById(R.id.like_counter);
this.cardHeader = (TextView) itemView.findViewById(R.id.card_header_text);
this.cardAddress = (TextView) itemView.findViewById(R.id.card_address_text);
this.cardDate = (TextView) itemView.findViewById(R.id.card_date_text);
this.cardDays = (TextView) itemView.findViewById(R.id.card_days_text);
}
}
public RealmContentAdapter (Context context, OrderedRealmCollection<ContentDataModel> data){
super(context, data, true);
mContext = context;
}
@Override
public RealmContentAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RealmContentAdapter.ViewHolder holder, int position) {
ContentDataModel model = getData().get(position);
holder.likeCounter.setText(String.valueOf(model.getLikesCounter()));
holder.cardHeader.setText(model.getTitle());
holder.cardIcon.setImageResource(R.drawable.nature);
if (model.getGeoAddress() != null){
holder.cardAddress.setText(model.getGeoAddress().getAddress());
} else {
holder.cardAddress.setText("");
}
holder.cardDate.setText(model.getNormalDate());
holder.cardDays.setText(String.valueOf(model.getDays()));
}
public class ContentDataModel extends RealmObject {
@SerializedName("id")
@Expose
private int id;
@SerializedName("user")
@Expose
private User user;
@SerializedName("geo_address")
@Expose
private GeoAddress geoAddress;
@SerializedName("category")
@Expose
private Category category;
@SerializedName("type")
@Expose
private Type type;
@SerializedName("title")
@Expose
private String title;
@SerializedName("body")
@Expose
private String body;
@SerializedName("created_date")
@Expose
private int createdDate;
@SerializedName("start_date")
@Expose
private int startDate;
@SerializedName("state")
@Expose
private State state;
@SerializedName("ticket_id")
@Expose
private String ticketId;
@SerializedName("files")
@Expose
@Ignore
private List<Files> files = new ArrayList<>();
@SerializedName("performers")
@Expose
@Ignore
private List<Performer> performers = new ArrayList<>();
@SerializedName("deadline")
@Expose
private int deadline;
@SerializedName("likes_counter")
@Expose
private int likesCounter;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public GeoAddress getGeoAddress() {
return geoAddress;
}
public void setGeoAddress(GeoAddress geoAddress) {
this.geoAddress = geoAddress;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public int getCreatedDate() {
return createdDate;
}
public void setCreatedDate(int createdDate) {
this.createdDate = createdDate;
}
public int getStartDate() {
return startDate;
}
public void setStartDate(int startDate) {
this.startDate = startDate;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public String getTicketId() {
return ticketId;
}
public void setTicketId(String ticketId) {
this.ticketId = ticketId;
}
public List<Files> getFiles() {
return files;
}
public void setFiles(List<Files> files) {
this.files = files;
}
public List<Performer> getPerformers() {
return performers;
}
public void setPerformers(List<Performer> performers) {
this.performers = performers;
}
public int getDeadline() {
return deadline;
}
public void setDeadline(int deadline) {
this.deadline = deadline;
}
public int getLikesCounter() {
return likesCounter;
}
public void setLikesCounter(int likesCounter) {
this.likesCounter = likesCounter;
}
public String getNormalDate(){
return DateFormatter.getNormalDate(getStartDate());
}
public String getDays(){
return DateFormatter.getGoneDays(getStartDate());
}
公共类RealmContentAdapter扩展RealmRecyclServiceAdapter{
私有上下文;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
私家ImageView cardIcon;
私人文本视图,如计数器、卡头、卡地址、卡日期、卡天数;
公共视图持有者(视图项视图){
超级(项目视图);
this.cardIcon=(ImageView)itemView.findViewById(R.id.card_图标);
this.likeCounter=(TextView)itemView.findViewById(R.id.like_计数器);
this.cardHeader=(TextView)itemView.findViewById(R.id.card\u header\u text);
this.carddress=(TextView)itemView.findViewById(R.id.card\u address\u text);
this.cardDate=(TextView)itemView.findViewById(R.id.card\u date\u text);
this.cardDays=(TextView)itemView.findViewById(R.id.card\u days\u text);
}
}
公共RealmContentAdapter(上下文上下文、OrderedRealmCollection数据){
super(上下文、数据、true);
mContext=上下文;
}
@凌驾
public RealmContentAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.card_项目,父项,假);
返回新的ViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(RealmContentAdapter.ViewHolder,int位置){
ContentDataModel model=getData().get(位置);
holder.likeCounter.setText(String.valueOf(model.getlikecounter());
holder.cardHeader.setText(model.getTitle());
cardIcon.setImageResource支架(R.drawable.nature);
if(model.getGeoAddress()!=null){
holder.carddress.setText(model.getGeoAddress().getAddress());
}否则{
持有者.carddress.setText(“”);
}
holder.cardDate.setText(model.getNormalDate());
holder.cardDays.setText(String.valueOf(model.getDays());
}
公共类ContentDataModel扩展了RealmObject{
@序列化名称(“id”)
@暴露
私有int-id;
@SerializedName(“用户”)
@暴露
私人用户;
@序列化名称(“地理地址”)
@暴露
专用地址;
@序列化名称(“类别”)
@暴露
私人类别;
@序列化名称(“类型”)
@暴露
私有类型;
@序列化名称(“标题”)
@暴露
私有字符串标题;
@序列化名称(“正文”)
@暴露
私有字符串体;
@SerializedName(“创建日期”)
@暴露
私有int-createdDate;
@SerializedName(“开始日期”)
@暴露
私人国际标准日期;
@序列化名称(“状态”)
@暴露
私营国家;
@序列化名称(“票证id”)
@暴露
私人字符串ticketId;
@序列化名称(“文件”)
@暴露
@忽略
私有列表文件=新的ArrayList();
@序列化名称(“表演者”)
@暴露
@忽略
private List performers=new ArrayList();
@序列化名称(“截止日期”)
@暴露
私营机构的最后期限;
@序列化名称(“喜欢的计数器”)
@暴露
私用int-likesCounter;
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共用户getUser(){
返回用户;
}
公共void setUser(用户){
this.user=用户;
}
公共地理地址getGeoAddress(){
返回地理地址;
}
public void setGeoAddress(GeoAddress GeoAddress){
this.geoAddress=geoAddress;
}
公共类别getCategory(){
退货类别;
}
公共无效集合类别(类别){
this.category=类别;
}
公共类型getType(){
返回类型;
}
公共void集合类型(类型){
this.type=type;
}
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共字符串getBody(){
返回体;
}
公共体(字符串体){
这个身体=身体;
}
public int getCreatedDate(){
返回createdDate;
}
公共void setCreatedDate(int createdDate){
this.createdDate=createdDate;
}
public int getStartDate(){
返回起始日期;
}
公共无效设置开始日期(int startDate){
this.startDate=startDate;
}
公共状态getState(){
返回状态;
}
公共无效设置状态(状态){
this.state=状态;
}
公共字符串getTicketId(){
返回TID;
}
公共void setTicketId(字符串ticketId){
this.ticketId=ticketId;
}
公共列表getFiles(){
归还文件;
}
公共无效设置文件(列出文件){
this.files=文件;
}
公共列表getPerformers(){
返回表演者;
}
公共执行者(列出执行者){
这个。表演者=表演者;
}
public int getDeadline(){
归还期限;
}
公共无效设置截止日期(整数截止日期){
this.deadline=截止日期;
}
public int getlikesconter(){
返回式计数器;
}
公共无效setLikeCounter(int-LikeCounter){
this.likesconter=likesconter;
}
公共字符串getNormalDate(){
return DateFormatter.getNormalDate(getStartDate());
}
公共字符串getDays(){
return DateFormatter.getGoneDays(getStartDate());
}
我还有一些其他的pojo课程,但这是主要的。
我的回收碎片:
public class RecyclerFragment extends Fragment {
private static final String KEY_FILE = "file";
private RealmContentAdapter mAdapter;
private RealmResults<ContentDataModel> mData;
private RecyclerView mRecyclerView;
private Realm mRealm;
public static Fragment newInstance(String file) {
RecyclerFragment fragment = new RecyclerFragment();
Bundle args = new Bundle();
args.putString(KEY_FILE, file);
fragment.setArguments(args);
return fragment;
}
public String getPage() {
return (getArguments().getString(KEY_FILE));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recycler_fragment_layout, container, false);
mIntent = new Intent(getContext(), CardActivity.class);
mRealm = Realm.getDefaultInstance();
mData = mRealm.where(ContentDataModel.class).findAll();
ApiService apiService = ApiModule.getApiService();
Observable<List<ContentDataModel>> tabOneContent = apiService.loadCards(
getString(R.string.processing_state), 10);
Observable<List<ContentDataModel>> tabTwoContent = apiService.loadCards(
getString(R.string.done_state), 10);
Observable<List<ContentDataModel>> tabThreeContent = apiService.loadCards(
getString(R.string.pending_state), 10);
mRecyclerView = (RecyclerView) view.findViewById(R.id.tab_recycler);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(),
LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(layoutManager);
mAdapter = new RealmContentAdapter(getContext(), mData);
mRecyclerView.setAdapter(mAdapter);
if (getPage().equals(getString(R.string.processing_flag))) {
tabOneContent
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<ContentDataModel>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<ContentDataModel> dataSet) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(dataSet);
realm.commitTransaction();
realm.close();
}
});
} else if (getPage().equals(getString(R.string.done_flag))) {
tabTwoContent
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<ContentDataModel>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<ContentDataModel> dataSet) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(dataSet);
realm.commitTransaction();
realm.close();
}
});
} else if (getPage().equals(getString(R.string.pending_flag))) {
tabThreeContent
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<ContentDataModel>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<ContentDataModel> dataSet) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(dataSet);
realm.commitTransaction();
realm.close();
}
});
}
return view;
}
公共类RecyclerFragment扩展了片段{
私有静态最终字符串KEY_FILE=“FILE”;
私有实体内容适配器mAdapter;
私有RealmResults mData;
私人回收视图mRecyclerView;
私人领域;
公共静态片段newInstance(字符串文件){
RecyclerFragment片段=新的RecyclerFragment();
Bundle args=新Bundle();
args.putString(KEY_文件,FILE);
fragment.setArguments(args);
返回片段;
}
公共字符串getPage(){
返回(getArguments().getString(KEY_文件));
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.recycler\u fragment\u布局,容器,false);
minent=新意图(getContext)