Levando em consideracao o seguinte projeto: https://github.com/googlesamples/android-architecture/tree/dev-todo-mvp-room
Tenho dúvida em como fazer a verdadeira implementacao da classe TasksRemoteDataSource.java uma vez que no exemplo apenas foi acrescentado um delay na execucao dos metodos.
Partindo do principio que temos um webservice que prove dados(em xml) para a aplicacao.
O metodo para buscar todas as tarefas seria algo parecido com:
@Override
public void getTasks(final @NonNull LoadTasksCallback callback) {
// Simulate network by delaying the execution.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http:minhaurl/ToDoService/todos");
urlConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer buffer = new StringBuffer();
String dados;
while ((dados = reader.readLine()) != null){
buffer.append(dados);
}
//Aqui teria que haver algum Parser para transformar a string em algum objeto?
//Como carregar os dados lidos em uma estrutura do tipo utilizada no exemplo?
/*
private final static Map<String, Task> TASKS_SERVICE_DATA;
static {
TASKS_SERVICE_DATA = new LinkedHashMap<>(2);
addTask("Build tower in Pisa", "Ground looks good, no foundation work required.");
addTask("Finish bridge in Tacoma", "Found awesome girders at half the cost!");
}
*/
//retornar este callback com uma lista de tarefas buscadas no webservice
callback.onTasksLoaded(Lists.newArrayList(TASKS_SERVICE_DATA.values()));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (urlConnection != null){
urlConnection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Alguma dica ?