Question: Consider a client-server app, being the client an Android app. As you well know, every time we want to access/download information from a server there are some necessary/religious steps we must go through.

Let's say we want to use openweathermap.org APIs for retrieving weather information on the last 7 days. From a client (Android) perspective, it is necessary to:

1. Write a function that can download information from a generic url, using the HttpURLConnection class as well as others (OutputStreamWriter, BufferedReader and so on).
2. Properly construct an URL object through an URI builder, and specify a RequestMethod (GET/POST), as well as other things like setting a RequestProperty.
3. Manage errors properly through exhaustive try-catch-finally blocks.
4. Parse the downloaded data, that can be either XML or JSON (or others).

Sometimes there are even more things to do, making the process to get usable information from a server painful.

I am wondering if there exists any library that take care of this for us, maybe through simple methods with multiple constructors that would be called from a separate Thread or something.

I've heard of www.spring.io, but it seems like a HUGE project and feel like it would be the same as using a sledgehammer to crack a nut.

Answer: 
A year ago I played a bit with their api, and I also used a Volley library to do it. The code is available on my repo on GitHub.

<https://github.com/tnovoselec/HrPrognoza>

However, I would recommend using Retrofit library to make network calls nowadays. It's dead simple to use, and quite powerful.

<http://square.github.io/retrofit/>
Asking for tools is off-topic here, so I will not give you any recommendations. I will tell you how you can do this less painful:

* create a class which will handle the requests for you
* this class should have methods for preparing the request with parameters, sending the request, handling the errors and calling a callback
* use this class for making requests
* if you have specific needs, inherit another class from this class

So, if you create a `RequestHandler`, which is able to prepare parameters, send get or post requests and call the callback (through reflection, maybe), then you have the core logic which can be later painlessly used.

Later, if you have to send requests to a given API, for instance openweathermap, then you can create an `OpenWeatherMapRequestHandler` which `extends RequestHandler`.

Naturally, you can make your life simpler using other tools, but this is the logic you need.