Server-side I have an HttpSession object. Each time the client starts the connection to the Servlet, the session changes. Here I have a simplified version of my Servlet code:
//import ...
@WebServlet(name = "ServletController", urlPatterns = {"/ServletController"})
public class ServletController extends HttpServlet {
    public void init(ServletConfig conf) {
        //...
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //...
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain");
        HttpSession s = request.getSession();
        PrintWriter out = response.getWriter();
        try {
            String action = request.getParameter("action");
            switch (action) {
                case "login":
                    s.setAttribute("account", "John");
                    out.println("Logged in successfully. Session: " + s);
                    out.flush();
                    break;
                case "account":
                    String account = (String) s.getAttribute("account");
                    out.println(account + ". Session: " + s);
                    out.flush();
                    break;
                default:
                    break;
            }
        } catch (Exception x) {
            System.out.println(x);
        }
    }
}
And here the simplified Android one:
//import ...
public class Operation {
    public static Executor e = Executors.newSingleThreadExecutor();
    public static void main(String[] args) {
        Button login_btn = findViewById(R.id.login);
        Button account_btn = findViewById(R.id.account);
        login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                e.execute(() -> {
                    String login = Operation.operation("?action=login");
                });
            }
        });
        account_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                e.execute(() -> {
                    String account = Operation.operation("?action=account");
                });
            }
        });
        System.out.println(login);
        System.out.println(account);
    }
    public static String operation(String urlParameters) {
        HttpURLConnection conn = null;
        try {
            System.out.println(urlParameters);
            URL url = new URL("http://10.0.2.2:8080/progettoTweb/ServletController" + urlParameters);
            conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(1000);
            conn.setConnectTimeout(1500);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            int response = conn.getResponseCode();
            return readIt(conn.getInputStream());
        } catch (Exception ex) {
            System.out.println(ex);
            return null;
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }
    }
    //building the output as a String
    private static String readIt(InputStream stream) throws IOException, UnsupportedEncodingException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
        String line;
        StringBuilder result = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            result.append(line).append("\n");
        }
        return result.toString();
    }
}
As the System.out.println in the Android app show, I obtain a different session for each Operation.operation call I make. In the original code I use SharedPreferences in order to save my data, but it does not solve the problem since I do not know how to use the session, gained from the interaction with the server-side, to obtain the required values. Indeed, in the Servlet code I use s.getAttribute() but, since it creates a new HttpSession object each time, It cannot give back the requested values.
