我正在使用 Retrofit2 和 Rxjava2 作为我的 Android 应用程序的网络库,以及 NodeJS 和 MongoDB 作为后端服务。我想从服务器获取数据并将数据存储在 Room 数据库中,以便用户再次打开应用程序时从 Room 而不是从服务器获取数据,直到服务器上添加了一些新数据。
到目前为止,我已经成功地从服务器获取了数据,并在 RecyclerView 中显示了它。
我的目标是:
1)在从服务器获取数据后将其存储在 Room 数据库中。
2)在服务器更新一些新数据之前,从 Room 数据库中显示数据。
以下是我的代码:
ApiService.java
到目前为止,我已经成功地从服务器获取了数据,并在 RecyclerView 中显示了它。
我的目标是:
1)在从服务器获取数据后将其存储在 Room 数据库中。
2)在服务器更新一些新数据之前,从 Room 数据库中显示数据。
以下是我的代码:
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(){
}
}
BioData.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();
}
}
我该如何在我的应用中添加Room数据库,请告诉我,我对此一无所知,任何帮助将不胜感激。
谢谢!