在Android中,可以使用Repository和ViewModel来处理业务逻辑转换。以下是一个包含代码示例的解决方法:
public class MyRepository {
private ApiService apiService;
public MyRepository() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
apiService = retrofit.create(ApiService.class);
}
public LiveData> getUsers() {
MutableLiveData> data = new MutableLiveData<>();
apiService.getUsers().enqueue(new Callback>() {
@Override
public void onResponse(Call> call, Response> response) {
if (response.isSuccessful()) {
data.setValue(response.body());
} else {
// handle error
}
}
@Override
public void onFailure(Call> call, Throwable t) {
// handle error
}
});
return data;
}
}
public class MyViewModel extends ViewModel {
private MyRepository repository;
private MutableLiveData> usersLiveData = new MutableLiveData<>();
public MyViewModel() {
repository = new MyRepository();
}
public LiveData> getUsersLiveData() {
return usersLiveData;
}
public void loadUsers() {
LiveData> users = repository.getUsers();
users.observeForever(new Observer>() {
@Override
public void onChanged(List userList) {
List userNames = new ArrayList<>();
for (User user : userList) {
userNames.add(user.getName());
}
usersLiveData.setValue(userNames);
}
});
}
}
public class MainActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getUsersLiveData().observe(this, new Observer>() {
@Override
public void onChanged(List userNames) {
// 更新UI,显示用户列表
}
});
viewModel.loadUsers();
}
}
通过以上的解决方法,在Repository中处理数据源和网络请求,在ViewModel中处理业务逻辑和数据转换,并通过观察LiveData来更新UI,可以更好地分离业务逻辑和UI层。