从服务器获取数据后如何将数据存储在房间数据库中

2023-11-23

我在我的 android 应用程序中使用 Retrofit2 和 Rxjava2 作为网络库,使用 NodeJS 和 MongoDB 作为后端服务。我想从服务器获取数据并将数据存储在房间数据库中,以便用户再次打开应用程序时它会从房间获取数据并在服务器上添加一些新数据之前,不会来自服务器。

到目前为止,我已成功从服务器获取数据并将其显示在回收器视图中。

我想要实现的目标:

1) 从服务器获取数据后将数据存储在房间数据库中。

2) 显示房间数据库中的数据,直到服务器上更新一些新数据。

这是我的代码如下:

ApiService.java

public interface ApiService {

@POST("retrofitUsers")
@FormUrlEncoded
Observable<String> saveData(@Field("name") String name,
                             @Field("age") String age);

@GET("getUsers")
Observable<List<BioData>> getData();

}

RetrofitClient.java

public class RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getInstance(){

    if(retrofit == null)
        retrofit = new Retrofit.Builder()
                .baseUrl("https://bookbudiapp.herokuapp.com/")
                .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

    return retrofit;

}

private RetrofitClient(){

}
}

生物数据.java

public class BioData {

@SerializedName("name")
@Expose
private String name;

@SerializedName("age")
@Expose
private String age;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}
}

MainActivity.java

public class Users extends AppCompatActivity {

RecyclerView recycle;
UserAdapter adapter;
List<BioData> list;
CompositeDisposable compositeDisposable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recycle = findViewById(R.id.recycle);
    recycle.setHasFixedSize(true);
    recycle.setLayoutManager(new LinearLayoutManager(this));

    list  = new ArrayList<>();

    compositeDisposable = new CompositeDisposable();

    fetchData();
}

    private void fetchData(){

    Retrofit retrofit  = RetrofitClient.getInstance();
    ApiService myApi = retrofit.create(ApiService.class);

    Disposable disposable = myApi.getData().subscribeOn(Schedulers.io())
                                           .observeOn(AndroidSchedulers.mainThread())
                                           .subscribe(new Consumer<List<BioData>>() {
                                               @Override
                                               public void accept(List<BioData> bioData) throws Exception {

                                                   adapter = new UserAdapter(bioData,getApplicationContext());
                                                   recycle.setAdapter(adapter);
                                               }
                                           });


    compositeDisposable.add(disposable);

}

@Override
protected void onStop() {
    super.onStop();

   compositeDisposable.clear();

  }
}

如何在我的应用程序中添加房间数据库让我知道我不知道任何帮助将不胜感激。

THANKS


Android 开发者有一个很好的 Room 入门教程:https://developer.android.com/training/data-storage/room/index.html

对于您想要添加的功能,使用存储库模式是有好处的。为了简单起见,存储库模式就像应用程序和服务器之间的一个类,您在其中询问一些数据(例如用户名),而应用程序不知道该数据来自何处(数据库或服务器)。存储库将执行以下操作:

class UserRepository {

  public User getUser() {
     User user = db.userDao().getUser() //Room sintax
      if(user==null){
         //access to server and get user object
         db.userDao().insert(user)
      }
      return db.userDao().getUser()
  }
}

这允许应用程序解耦,例如,如果您将来想要更改服务器,则只需更改存储库类,应用程序的其余部分将是相同的。我建议你调查一下。您还应该使用存储库应该实现的接口,这会更加解耦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从服务器获取数据后如何将数据存储在房间数据库中 的相关文章

随机推荐

  • 在包含的模型上使用 limit()

    The Code 假设我有两个模型 名为Product and Image 它们通过以下方式链接Product hasMany Image and Image belongsTo Product 现在 假设我想获取所有带有第一张图片的产品
  • ASP.NET MVC4 多语言数据注释

    在标准应用程序中 我有以下内容 Required DisplayName Email Address public string EmailAddress get set 这反过来会自动为该表单字段生成英文标签 现在 如果我需要我的应用程序
  • VBA自动过滤器不等于

    Sub Macro1 Remove all except validated ActiveSheet Range A 1 H 5202 AutoFilter field 8 Criteria1 lt gt Validated Actives
  • 背景图像:url(“images/plaid.jpg”)无重复;不会出现

    我似乎无法将 plaid jpg 作为任何页面的背景 更不用说所有页面了 我尝试通过 body html home 的特定 id 来选择它 没有任何作用 该图像为 300 x 421 像素 我不需要它漂亮地出现 我只是想让它在一切背后出现
  • 如何使UIImagePickerController StatusBar lightContent风格?

    当我呈现 UIImagePickerController 时状态栏文本颜色仍然是黑色 如何制作这样的 只需三步 1 Add UINavigationControllerDelegate UIImagePickerControllerDele
  • n 球坐标系到笛卡尔坐标系

    Is there any efficient way of changing between Cartesian coordinate system and n spherical one The transformation is as
  • 如何设置 GraphQL 查询,以便需要一个或另一个参数,但不能同时需要两者

    我刚刚开始掌握 GraphQL 我设置了以下查询 type UserType args id name id type new GraphQLNonNull GraphQLID email name email type new Graph
  • 为什么我无法更改 Rhino Mocks 存根对象中的返回值?

    如果这是一个愚蠢的问题 请原谅我 但我在嘲笑方面还很陌生 并且正在努力解决这个问题 我有一些单元测试 使用内置的 Visual Studio 2010 Professional 测试功能 它们使用方法所需的存根 我创建了一个存根 并为几个属
  • 嵌套字典到嵌套转发器 asp.net c#

    我正在制作一个 asp page 它将显示有关公司资产的分层信息 为了获取数据 我使用了 lambda 表达式 FASAssetInfoDataContext fasInfo new FASAssetInfoDataContext var
  • Imagemagick仅使用一个核心

    我正在运行一个 8 核的 Ubuntu 服务器 然而 imagemagick 始终只使用 1 个单核 跑步identify version返回 Version ImageMagick 6 6 9 7 2012 08 17 Q16 http
  • 从 OWL 本体到 Neo4j 图形数据库的映射

    我正在与 OWL 合作 创建了一个非常大的本体 我使用曼彻斯特大学开发的OWL API http owlapi sourceforge net 问题是 只有使用 OWL API 本体才会加载到内存中 有两种有价值的解决方案可以将数据从本体传
  • 滚动视图没有完全向下滚动

    我正在构建一个类似聊天的应用程序 它使用滚动视图在屏幕上显示用户输入的文本 我正在做的是随着更多文本附加到屏幕上 自动向下滚动滚动视图 我在用着 ScrollView my scrollview ScrollView findViewByI
  • Android自定义按钮,里面有imageview和textview?

    我正在寻找创建一个自定义按钮 理想情况下 该按钮左侧有一个图像 右侧有一个文本视图 我将如何实现这个目标 最快的方法 创建可点击的视图 其中包含 ImageView 和 TextView 并以可绘制按钮作为背景
  • MSVC - 停止标题中的警告

    我正在将 MSVC 与 CMaked 项目一起使用 因此 我在 MSVC 上启用了许多为 gcc 和 clang 启用的标志 然而 Wall 警告级别让我有些痛苦 它警告我包含头文件中的各种内容 例如 stdio h 和 boost 头文件
  • jquery - 检测div的底部是否接触浏览器窗口的底部?

    给定页面上的 div 如何检测div何时滚动到浏览器窗口底部的位置 与浏览器窗口底部齐平 我认为上面的答案不起作用 因为 offset top 是 div 和文档顶部之间的空间 并且不是可变的 这对我有用 var a mydiv offse
  • matplotlib:使图例键成为方形

    我正在使用 matplotlib 并且希望在制作条形图时将图例中的键更改为正方形而不是矩形 有没有办法指定这一点 我现在拥有的 我想要的是 Thanks 如果您想要一个非常快速和肮脏的解决方案来获得近似平方 可能需要根据您的绘图进行一些微调
  • 如何在Java中执行无符号到有符号的转换?

    假设我从输入设备读取了这些字节 6F D4 06 40 该数字是毫弧秒格式的经度读数 最高位 0x80000000 基本上始终为零 并且在本问题中被忽略 我可以轻松地将字节转换为unsigned整数 1876166208 但是如何将该无符号
  • 作为好友的模板参数

    在 C 03 中 以下内容是非法的 尽管某些编译器支持它 template
  • 如何判断给定的URL链接是视频还是图片?

    我正在尝试获取用户输入的给定 URL 并确定该 URL 是否指向图像或视频 示例用例 当用户粘贴 YouTube 视频的 URL 时 保存时页面将自动显示嵌入式 YouTube 播放器 当用户在 Flickr 中发布图片的 URL 时 在保
  • 从服务器获取数据后如何将数据存储在房间数据库中

    我在我的 android 应用程序中使用 Retrofit2 和 Rxjava2 作为网络库 使用 NodeJS 和 MongoDB 作为后端服务 我想从服务器获取数据并将数据存储在房间数据库中 以便用户再次打开应用程序时它会从房间获取数据