Я настроил все для звонков и получаю список с размером 0. После некоторых исследований я понял, что пытаюсь получить объекты JSON, а корнем моего response.body является массив JSON. Я проверил Интернет, похоже, мне нужно добавить обертку к моей «Задаче» (которая является моей моделью), делать вызовы с помощью Списка.
Но я точно не понимаю, как мне это сделать.
Где я могу получить массив JSON и где и как именно я должен проанализировать корень массива объектов JSON в список объектов JSON, чтобы я мог продолжить связывание в представлении рециркулятора.
Модель:
public class Task {
@SerializedName("taskId")
@Expose
private int taskId;
private int requestId;
private int currentEventId;
private int technicianId;
private int supervisorId;
private String status;
@SerializedName("category")
@Expose
@Nullable
private String itemCategory;
@SerializedName("brand")
@Expose
@Nullable
private String itemBrand;
@SerializedName("model")
@Expose
@Nullable
private String itemModel;
@SerializedName("series")
@Expose
@Nullable
private String itemSeria;
@SerializedName("series")
@Expose
@Nullable
private String address;
private String requestIndicator;
private String requestCode;
private String requestName;
private String requestCompanyLogo;
@SerializedName("assignDate")
@Expose
private String assignDate;
@SerializedName("assignDate")
@Expose
private String assignTime;
private List<Task> tasks = null;
public int getTaskId() {
return taskId;
}
public void setTaskId(int taskId) {
this.taskId = taskId;
}
public int getRequestId() {
return requestId;
}
public void setRequestId(int requestId) {
this.requestId = requestId;
}
public int getCurrentEventId() {
return currentEventId;
}
public void setCurrentEventId(int currentEventId) {
this.currentEventId = currentEventId;
}
public int getTechnicianId() {
return technicianId;
}
public void setTechnicianId(int technicianId) {
this.technicianId = technicianId;
}
public int getSupervisorId() {
return supervisorId;
}
public void setSupervisorId(int supervisorId) {
this.supervisorId = supervisorId;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getAssignDate() {
return assignDate;
}
public void setAssignDate(String assignDate) {
this.assignDate = assignDate;
}
public String getRequestName() {
return requestName;
}
public void setRequestName(String requestName) {
this.requestName = requestName;
}
public String getItemCategory() {
return itemCategory;
}
public void setItemCategory(String itemCategory) {
this.itemCategory = itemCategory;
}
public String getItemBrand() {
return itemBrand;
}
public void setItemBrand(String itemBrand) {
this.itemBrand = itemBrand;
}
public String getItemModel() {
return itemModel;
}
public void setItemModel(String itemModel) {
this.itemModel = itemModel;
}
public String getItemSeria() {
return itemSeria;
}
public void setItemSeria(String itemSeria) {
this.itemSeria = itemSeria;
}
public String getRequestIndicator() {
return requestIndicator;
}
public void setRequestIndicator(String requestIndicator) {
this.requestIndicator = requestIndicator;
}
public String getRequestCode() {
return requestCode;
}
public void setRequestCode(String requestCode) {
this.requestCode = requestCode;
}
public String getRequestCompanyLogo() {
return requestCompanyLogo;
}
public void setRequestCompanyLogo(String requestCompanyLogo) {
this.requestCompanyLogo = requestCompanyLogo;
}
public String getAssignTime() {
return assignTime;
}
public void setAssignTime(String assignTime) {
this.assignTime = assignTime;
}
public List<Task> getTasks() {
return tasks;
}
public void setTasks(List<Task> tasks) {
this.tasks = tasks;
}
}
Webservice:
public interface TaskWebService {
@GET("tasks/new")
Call<List<Task>> getTasks(@Query("count") int count, @Query("pageNumber") int pageNumber, @Query("taskStatus") String taskStatus, @Header("token") String token);
}
RetrofitNetworkService:
public class RetrofitNetworkService {
private static final String BASE_URL = "bla bla bla";
private static Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
public static <S> S createService(Class<S> serviceClass) {
return retrofit.create(serviceClass);
}
}
TaskRepository:
public class TaskRepo {
private static TaskRepo taskRepo;
private static TaskWebService taskWebService;
private TaskRepo() {
taskWebService =
RetrofitNetworkService.createService(TaskWebService.class);
}
public static TaskRepo getInstance() {
if (taskRepo == null) {
taskRepo = new TaskRepo();
}
return taskRepo;
}
public MutableLiveData<List<Task>> getTasks(int count, int pageNumber, String taskStatus, String token) {
final MutableLiveData<List<Task>> allTasks = new MutableLiveData<>();
taskWebService.getTasks(count, pageNumber, taskStatus, token).enqueue(new Callback<List<Task>>() {
@Override
public void onResponse(Call<List<Task>> call, Response<List<Task>> response) {
if (response.isSuccessful()) {
allTasks.setValue(response.body());
}
}
@Override
public void onFailure(Call<List<Task>> call, Throwable t) {
allTasks.setValue(null);
t.printStackTrace();
}
});
return allTasks;
}
} * * тысяча двадцать-один
ViewModel:
открытый класс ViewModelTask расширяет ViewModel {
private MutableLiveData<List<Task>> allTasks = new MutableLiveData<>();
private TaskRepo taskRepo;
public void initialize() {
if (allTasks != null) {
return;
}
taskRepo = TaskRepo.getInstance();
allTasks = taskRepo.getTasks(15, 0, "", ""code);
}
public LiveData<List<Task>> getAllTasks() {
return allTasks;
}
}
Вид:
открытый класс FragmentTabAll расширяет Fragment {
private RecyclerView taskRecyclerView;
private int adapterType;
private List<Task> taskList = new ArrayList<>();
private ViewModelTask viewModelTask;
private TaskAdapter taskAdapter;
public FragmentTabAll(int adapterType) {
this.adapterType = adapterType;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_tab_all, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
taskRecyclerView = view.findViewById(R.id.task_cardview);
taskAdapter = new TaskAdapter(getActivity());
checkAdapterType();
}
private void checkAdapterType() {
if (adapterType == Utils.TASK_ADAPTER) {
taskRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
viewModelTask = ViewModelProviders.of(this).get(ViewModelTask.class);
viewModelTask.initialize();
taskRecyclerView.setAdapter(taskAdapter);
viewModelTask.getAllTasks().observe(getActivity(), new Observer<List<Task>>() {
@Override
public void onChanged(List<Task> tasks) {
taskList.addAll(tasks);
taskRecyclerView.setAdapter(taskAdapter);
taskAdapter.setTaskList(taskList);
}
});
taskRecyclerView.setAdapter(taskAdapter);
} else if (adapterType == Utils.REQUEST_ADAPTER) {
taskRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
taskRecyclerView.setAdapter(new RequestAdapter(getActivity()));
}
}
}
Я ожидаю получить представление перезапуска, полное задач (привязка данных элемента работает, когда я заполняю список вручную), но когда я пытаюсь реализовать вызовы, я получаю пустой список.