我正在使用改造来获取数据,并且我想将数据存储在本地数据库中,所以我使用了 RoomDatabase。这是https://reqres.in/api/users的 api
{"page":1,"per_page":6,"total":12,"total_pages":2,"data":[{"id":1,"email":"george.bluth@reqres.in","first_name":"George","last_name":"Bluth","avatar":"https://reqres.in/img/faces/1-image.jpg"},{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},{"id":3,"email":"emma.wong@reqres.in","first_name":"Emma","last_name":"Wong","avatar":"https://reqres.in/img/faces/3-image.jpg"},
这是我想用 per_page=3 获取的数据。下面是我的数据模型
@Entity(tableName = "userdata",indices = @Index(value = {"id"},unique = true))
public class DataModel {
@PrimaryKey@NonNull
@SerializedName("id")
@ColumnInfo(name = "id")
int id;
@SerializedName("email")
@ColumnInfo(name = "email")
String email;
@SerializedName("first_name")
@ColumnInfo(name = "first_name")
String first_name;
@SerializedName("last_name")
@ColumnInfo(name = "last_name")
String last_name;
@SerializedName("avatar")
@ColumnInfo(name = "avatar")
String avatar;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
}
这是我的 ApiInterface
public interface UserApi {
@GET("/api/users?")
Call<List<DataModel>> getAllUers
(
@Query("per_page") int per_page
);
}
下面是我的 MainActivity
public class MainActivity extends AppCompatActivity {
private User_ViewModel userViewModel;
private List<DataModel> getUsers;
private UserAdpater userAdpater;
private RecyclerView recyclerView;
private UserRepository repository;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
repository=new UserRepository(getApplication());
getUsers=new ArrayList<>();
recyclerView=findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
userViewModel=new ViewModelProvider(this).get(User_ViewModel.class);
userAdpater=new UserAdpater(this,getUsers);
makeRequest();
userViewModel.getGetAllUsers().observe(this, new Observer<List<DataModel>>() {
@Override
public void onChanged(List<DataModel> dataModels) {
recyclerView.setAdapter(userAdpater);
userAdpater.getAllDatas(dataModels);
Log.d("main", "onChanged: "+dataModels);
}
});
}
private void makeRequest() {
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("https://reqres.in")
.addConverterFactory(GsonConverterFactory.create())
.build();
UserApi api=retrofit.create(UserApi.class);
Call<List<DataModel>>call=api.getAllUers(5);
call.enqueue(new Callback<List<DataModel>>() {
@Override
public void onResponse(Call<List<DataModel>> call, Response<List<DataModel>> response) {
if (response.isSuccessful())
{
repository.insert(response.body());
}
}
@Override
public void onFailure(Call<List<DataModel>> call, Throwable t) {
Log.d("main", "onFailure: "+t.getMessage());
}
});
}
}
那么如何实现它。如果我制作 DataModel 并为这样的数据制作另一个类它会抛出一个错误 - 无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。
@Entity
public class DataModel {
@SerializedName("page")
public Integer page;
@SerializedName("per_page")
public Integer perPage;
@SerializedName("total")
public Integer total;
@SerializedName("total_pages")
public Integer totalPages;
@SerializedName("data")
public List<Datum> data = new ArrayList<>();