In my android activity I am using AsyncTask to get data from server using restTemplate and it is working perfectly. I am testing it in my mobile with wifi in my intranet environment as the server is for internal users and I am able to get data from server. But the problem is as sudden I turn Off wifi or change the network, the app crashes (Connection timed out). I know that the URL my app is trying to fetch data is no more accessible from internet but how to prevent app crash or show some notification something like no network. My code is
private class AsyncTaskRunner extends AsyncTask<String, String, Void> {
@Override
protected Void doInBackground(String... params) {
String username = "user";
String password = "pass";
String getAllItems = "http://172.16.243.15:8080/myapp/restGetAllItem";
HttpAuthentication authHeader = new HttpBasicAuthentication(username, password);
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAuthorization(authHeader);
requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
final RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
try{
ResponseEntity<List> responseEntity=restTemplate.exchange(getAllItems, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), List.class);
server_response=responseEntity.getBody();
System.out.println("server response size is"+server_response.size());
} catch (HttpClientErrorException e){
}
return null;
}
@Override
protected void onPostExecute(Void v){
ProgressBar progressBar=(ProgressBar)getView().findViewById(R.id.progressBar);
progressBar.setVisibility(getView().GONE);
RecyclerView recyclerView = (RecyclerView) getView().findViewById(R.id.card_recycler_view);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
DataAdapter adapter = new DataAdapter(getContext(), server_response);
recyclerView.setAdapter(adapter);
}
}