Android Java Web-Funktionsbeispiele

Android Java Web-Funktionsbeispiele einschließlich HTTP-Anfragen, URL-Verarbeitung und WebView-Integration

💻 URL-Verarbeitung java

🟢 simple ⭐⭐

URLs analysieren, erstellen und manipulieren mit richtiger Kodierung und Dekodierung

⏱️ 20 min 🏷️ java, android, url, web
Prerequisites: Basic Java knowledge, Android Uri API
// Android Java URL Handling Examples
// URL parsing, building, encoding, and decoding

import android.net.Uri;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

// 1. Basic URL Parsing
public class UrlParser {
    private String urlString;
    private URL url;
    private Uri uri;

    public UrlParser(String urlString) {
        this.urlString = urlString;
        try {
            this.url = new URL(urlString);
            this.uri = Uri.parse(urlString);
        } catch (Exception e) {
            System.out.println("Invalid URL: " + e.getMessage());
        }
    }

    // Get protocol/scheme
    public String getProtocol() {
        if (url != null) {
            return url.getProtocol();
        }
        return uri != null ? uri.getScheme() : null;
    }

    // Get host
    public String getHost() {
        if (url != null) {
            return url.getHost();
        }
        return uri != null ? uri.getHost() : null;
    }

    // Get port
    public int getPort() {
        if (url != null) {
            int port = url.getPort();
            return port == -1 ? url.getDefaultPort() : port;
        }
        return uri != null ? uri.getPort() : -1;
    }

    // Get path
    public String getPath() {
        if (url != null) {
            return url.getPath();
        }
        return uri != null ? uri.getPath() : null;
    }

    // Get query string
    public String getQuery() {
        if (url != null) {
            return url.getQuery();
        }
        return uri != null ? uri.getQuery() : null;
    }

    // Get reference/fragment
    public String getFragment() {
        if (url != null) {
            return url.getRef();
        }
        return uri != null ? uri.getFragment() : null;
    }

    // Print all URL components
    public void printComponents() {
        System.out.println("=== URL Components ===");
        System.out.println("Protocol: " + getProtocol());
        System.out.println("Host: " + getHost());
        System.out.println("Port: " + getPort());
        System.out.println("Path: " + getPath());
        System.out.println("Query: " + getQuery());
        System.out.println("Fragment: " + getFragment());
    }
}

// 2. URL Builder
public class UrlBuilder {
    private String scheme;
    private String authority;
    private String path;
    private Map<String, String> queryParams = new HashMap<>();
    private String fragment;

    public UrlBuilder() {
    }

    public UrlBuilder scheme(String scheme) {
        this.scheme = scheme;
        return this;
    }

    public UrlBuilder authority(String authority) {
        this.authority = authority;
        return this;
    }

    public UrlBuilder host(String host) {
        this.authority = host;
        return this;
    }

    public UrlBuilder host(String host, int port) {
        this.authority = host + ":" + port;
        return this;
    }

    public UrlBuilder path(String path) {
        this.path = path;
        return this;
    }

    public UrlBuilder appendPath(String segment) {
        if (this.path == null) {
            this.path = segment;
        } else {
            if (!this.path.endsWith("/")) {
                this.path += "/";
            }
            this.path += segment;
        }
        return this;
    }

    public UrlBuilder queryParam(String key, String value) {
        this.queryParams.put(key, value);
        return this;
    }

    public UrlBuilder queryParams(Map<String, String> params) {
        if (params != null) {
            this.queryParams.putAll(params);
        }
        return this;
    }

    public UrlBuilder fragment(String fragment) {
        this.fragment = fragment;
        return this;
    }

    // Build Uri (Android)
    public Uri buildUri() {
        Uri.Builder builder = new Uri.Builder();
        builder.scheme(scheme);
        builder.authority(authority);
        builder.path(path);

        for (Map.Entry<String, String> entry : queryParams.entrySet()) {
            builder.appendQueryParameter(entry.getKey(), entry.getValue());
        }

        builder.fragment(fragment);

        return builder.build();
    }

    // Build URL string
    public String build() {
        return buildUri().toString();
    }

    // Build with encoded values
    public String buildEncoded() {
        Uri uri = buildUri();
        return uri.toString();
    }
}

// 3. URL Encoding and Decoding
public class UrlCodec {

    // Encode URL component
    public static String encode(String value) {
        try {
            return URLEncoder.encode(value, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            return value;
        }
    }

    // Decode URL component
    public static String decode(String encoded) {
        try {
            return URLDecoder.decode(encoded, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            return encoded;
        }
    }

    // Encode URL parameter
    public static String encodeParam(String param) {
        return encode(param).replace("+", "%20");
    }

    // Build query string
    public static String buildQueryString(Map<String, String> params) {
        StringBuilder query = new StringBuilder();

        for (Map.Entry<String, String> entry : params.entrySet()) {
            if (query.length() > 0) {
                query.append("&");
            }
            query.append(encodeParam(entry.getKey()));
            query.append("=");
            query.append(encodeParam(entry.getValue()));
        }

        return query.toString();
    }

    // Parse query string
    public static Map<String, String> parseQueryString(String query) {
        Map<String, String> params = new HashMap<>();

        if (query == null || query.isEmpty()) {
            return params;
        }

        String[] pairs = query.split("&");
        for (String pair : pairs) {
            String[] keyValue = pair.split("=", 2);
            if (keyValue.length == 2) {
                params.put(decode(keyValue[0]), decode(keyValue[1]));
            } else if (keyValue.length == 1) {
                params.put(decode(keyValue[0]), "");
            }
        }

        return params;
    }
}

// 4. Query Parameter Helper
public class QueryParamHelper {
    private Uri uri;

    public QueryParamHelper(String urlString) {
        this.uri = Uri.parse(urlString);
    }

    public QueryParamHelper(Uri uri) {
        this.uri = uri;
    }

    // Get query parameter
    public String getParam(String key) {
        return uri.getQueryParameter(key);
    }

    // Get query parameter with default value
    public String getParam(String key, String defaultValue) {
        String value = uri.getQueryParameter(key);
        return value != null ? value : defaultValue;
    }

    // Get boolean parameter
    public boolean getBooleanParam(String key, boolean defaultValue) {
        String value = uri.getQueryParameter(key);
        if (value == null) {
            return defaultValue;
        }
        return Boolean.parseBoolean(value);
    }

    // Get integer parameter
    public int getIntParam(String key, int defaultValue) {
        String value = uri.getQueryParameter(key);
        if (value == null) {
            return defaultValue;
        }
        try {
            return Integer.parseInt(value);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    // Get all query parameters
    public Map<String, String> getAllParams() {
        Map<String, String> params = new HashMap<>();
        Set<String> paramNames = uri.getQueryParameterNames();

        for (String name : paramNames) {
            params.put(name, uri.getQueryParameter(name));
        }

        return params;
    }

    // Check if parameter exists
    public boolean hasParam(String key) {
        return uri.getQueryParameter(key) != null;
    }

    // Print all parameters
    public void printAllParams() {
        System.out.println("=== Query Parameters ===");
        Set<String> paramNames = uri.getQueryParameterNames();

        for (String name : paramNames) {
            System.out.println(name + " = " + uri.getQueryParameter(name));
        }
    }
}

// 5. URL Validation
public class UrlValidator {

    // Check if string is valid URL
    public static boolean isValidUrl(String urlString) {
        try {
            URL url = new URL(urlString);
            url.toURI();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    // Check if using HTTPS
    public static boolean isHttps(String urlString) {
        try {
            URL url = new URL(urlString);
            return "https".equalsIgnoreCase(url.getProtocol());
        } catch (Exception e) {
            return false;
        }
    }

    // Get domain from URL
    public static String getDomain(String urlString) {
        try {
            URL url = new URL(urlString);
            return url.getHost();
        } catch (Exception e) {
            return null;
        }
    }

    // Check if same domain
    public static boolean isSameDomain(String url1, String url2) {
        String domain1 = getDomain(url1);
        String domain2 = getDomain(url2);

        if (domain1 == null || domain2 == null) {
            return false;
        }

        return domain1.equalsIgnoreCase(domain2);
    }
}

// 6. URL Manipulation
public class UrlManipulator {
    private Uri uri;

    public UrlManipulator(String urlString) {
        this.uri = Uri.parse(urlString);
    }

    // Add query parameter
    public String addQueryParam(String key, String value) {
        Uri.Builder builder = uri.buildUpon();
        builder.appendQueryParameter(key, value);
        return builder.build().toString();
    }

    // Remove query parameter
    public String removeQueryParam(String key) {
        String newUrl = uri.getScheme() + "://" + uri.getAuthority() + uri.getPath();

        Map<String, String> params = new HashMap<>();
        Set<String> paramNames = uri.getQueryParameterNames();

        for (String name : paramNames) {
            if (!name.equals(key)) {
                params.put(name, uri.getQueryParameter(name));
            }
        }

        if (!params.isEmpty()) {
            newUrl += "?" + UrlCodec.buildQueryString(params);
        }

        if (uri.getFragment() != null) {
            newUrl += "#" + uri.getFragment();
        }

        return newUrl;
    }

    // Replace path
    public String replacePath(String newPath) {
        Uri.Builder builder = uri.buildUpon();
        builder.path(newPath);
        return builder.build().toString();
    }

    // Add path segment
    public String appendPath(String segment) {
        Uri.Builder builder = uri.buildUpon();
        builder.appendPath(segment);
        return builder.build().toString();
    }

    // Set fragment
    public String setFragment(String fragment) {
        Uri.Builder builder = uri.buildUpon();
        builder.fragment(fragment);
        return builder.build().toString();
    }
}

// 7. Deep Link Handler
public class DeepLinkHandler {
    private Uri uri;

    public DeepLinkHandler(String deepLink) {
        this.uri = Uri.parse(deepLink);
    }

    // Get action from deep link
    public String getAction() {
        // Extract action from path, e.g., myapp://action/params
        List<String> pathSegments = uri.getPathSegments();
        if (!pathSegments.isEmpty()) {
            return pathSegments.get(0);
        }
        return null;
    }

    // Get parameter from deep link
    public String getParam(String key) {
        return uri.getQueryParameter(key);
    }

    // Check if matches scheme
    public boolean matchesScheme(String scheme) {
        return scheme.equals(uri.getScheme());
    }

    // Check if matches host
    public boolean matchesHost(String host) {
        return host.equals(uri.getHost());
    }

    // Print deep link info
    public void printInfo() {
        System.out.println("=== Deep Link Information ===");
        System.out.println("Scheme: " + uri.getScheme());
        System.out.println("Host: " + uri.getHost());
        System.out.println("Path: " + uri.getPath());
        System.out.println("Action: " + getAction());

        Set<String> paramNames = uri.getQueryParameterNames();
        if (!paramNames.isEmpty()) {
            System.out.println("Parameters:");
            for (String name : paramNames) {
                System.out.println("  " + name + " = " + uri.getQueryParameter(name));
            }
        }
    }
}

// Main demonstration
public class UrlHandlingDemo {
    public static void demonstrateUrlHandling() {
        System.out.println("=== Android Java URL Handling Examples ===\n");

        String testUrl = "https://example.com:8080/path/to/resource?key1=value1&key2=value2#fragment";

        // 1. URL parsing
        System.out.println("--- 1. URL Parsing ---");
        UrlParser parser = new UrlParser(testUrl);
        parser.printComponents();

        // 2. URL building
        System.out.println("\n--- 2. URL Building ---");
        UrlBuilder builder = new UrlBuilder()
            .scheme("https")
            .host("api.example.com")
            .appendPath("v1")
            .appendPath("users")
            .queryParam("page", "1")
            .queryParam("limit", "10");

        String builtUrl = builder.build();
        System.out.println("Built URL: " + builtUrl);

        // 3. URL encoding and decoding
        System.out.println("\n--- 3. URL Encoding/Decoding ---");
        String original = "Hello World! @#$";
        String encoded = UrlCodec.encode(original);
        String decoded = UrlCodec.decode(encoded);

        System.out.println("Original: " + original);
        System.out.println("Encoded: " + encoded);
        System.out.println("Decoded: " + decoded);

        // 4. Query parameter handling
        System.out.println("\n--- 4. Query Parameters ---");
        QueryParamHelper paramHelper = new QueryParamHelper(testUrl);
        paramHelper.printAllParams();

        System.out.println("key1 = " + paramHelper.getParam("key1"));
        System.out.println("page = " + paramHelper.getIntParam("page", 1));
        System.out.println("active = " + paramHelper.getBooleanParam("active", false));

        // 5. Build query string
        System.out.println("\n--- 5. Build Query String ---");
        Map<String, String> params = new HashMap<>();
        params.put("search", "java programming");
        params.put("filter", "recent");
        params.put("sort", "desc");

        String queryString = UrlCodec.buildQueryString(params);
        System.out.println("Query String: " + queryString);

        // 6. Parse query string
        System.out.println("\n--- 6. Parse Query String ---");
        Map<String, String> parsedParams = UrlCodec.parseQueryString(queryString);
        for (Map.Entry<String, String> entry : parsedParams.entrySet()) {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        }

        // 7. URL validation
        System.out.println("\n--- 7. URL Validation ---");
        System.out.println("Valid URL: " + UrlValidator.isValidUrl(testUrl));
        System.out.println("Is HTTPS: " + UrlValidator.isHttps(testUrl));
        System.out.println("Domain: " + UrlValidator.getDomain(testUrl));

        String invalidUrl = "not-a-valid-url";
        System.out.println("Valid URL: " + UrlValidator.isValidUrl(invalidUrl));

        // 8. URL manipulation
        System.out.println("\n--- 8. URL Manipulation ---");
        UrlManipulator manipulator = new UrlManipulator(testUrl);

        String modifiedUrl = manipulator
            .addQueryParam("newParam", "newValue")
            .appendPath("additional")
            .setFragment("newFragment");

        System.out.println("Modified URL: " + modifiedUrl);

        // 9. Deep link handling
        System.out.println("\n--- 9. Deep Link Handling ---");
        String deepLink = "myapp://open/product?id=123&ref=share";

        DeepLinkHandler deepLinkHandler = new DeepLinkHandler(deepLink);
        deepLinkHandler.printInfo();

        System.out.println("Matches scheme 'myapp': " + deepLinkHandler.matchesScheme("myapp"));
        System.out.println("Action: " + deepLinkHandler.getAction());
        System.out.println("Product ID: " + deepLinkHandler.getParam("id"));

        System.out.println("\n=== All URL Handling Examples Completed ===");
    }
}

💻 HTTP-Anfragen java

🟡 intermediate ⭐⭐⭐

GET, POST, PUT, DELETE Anfragen mit HttpURLConnection und OkHttp durchführen

⏱️ 30 min 🏷️ java, android, http, network
Prerequisites: Intermediate Java, HTTP protocols, OkHttp
// Android Java HTTP Requests Examples
// Using HttpURLConnection and OkHttp for making HTTP requests

import android.content.Context;
import android.os.AsyncTask;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
import okhttp3.*;

// 1. Basic HTTP Request with HttpURLConnection
public class BasicHttpURLConnection {
    private String baseUrl;

    public BasicHttpURLConnection(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    // GET request
    public String get(String endpoint) throws IOException {
        URL url = new URL(baseUrl + endpoint);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        try {
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);

            int responseCode = connection.getResponseCode();
            System.out.println("GET Response Code: " + responseCode);

            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream())
                );
                StringBuilder response = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();

                return response.toString();
            } else {
                return "GET request failed";
            }
        } finally {
            connection.disconnect();
        }
    }

    // POST request with JSON body
    public String post(String endpoint, String jsonData) throws IOException {
        URL url = new URL(baseUrl + endpoint);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        try {
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setRequestProperty("Accept", "application/json");
            connection.setDoOutput(true);

            // Write request body
            OutputStream outputStream = connection.getOutputStream();
            byte[] input = jsonData.getBytes("utf-8");
            outputStream.write(input, 0, input.length());

            int responseCode = connection.getResponseCode();
            System.out.println("POST Response Code: " + responseCode);

            if (responseCode == HttpURLConnection.HTTP_OK ||
                responseCode == HttpURLConnection.HTTP_CREATED) {

                BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream())
                );
                StringBuilder response = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();

                return response.toString();
            } else {
                return "POST request failed";
            }
        } finally {
            connection.disconnect();
        }
    }

    // PUT request
    public String put(String endpoint, String jsonData) throws IOException {
        URL url = new URL(baseUrl + endpoint);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        try {
            connection.setRequestMethod("PUT");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setDoOutput(true);

            OutputStream outputStream = connection.getOutputStream();
            byte[] input = jsonData.getBytes("utf-8");
            outputStream.write(input, 0, input.length);

            int responseCode = connection.getResponseCode();
            System.out.println("PUT Response Code: " + responseCode);

            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream())
                );
                StringBuilder response = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();

                return response.toString();
            } else {
                return "PUT request failed";
            }
        } finally {
            connection.disconnect();
        }
    }

    // DELETE request
    public String delete(String endpoint) throws IOException {
        URL url = new URL(baseUrl + endpoint);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        try {
            connection.setRequestMethod("DELETE");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);

            int responseCode = connection.getResponseCode();
            System.out.println("DELETE Response Code: " + responseCode);

            if (responseCode == HttpURLConnection.HTTP_OK ||
                responseCode == HttpURLConnection.HTTP_NO_CONTENT) {
                BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream())
                );
                StringBuilder response = new StringBuilder();
                String line;

                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();

                return response.toString();
            } else {
                return "DELETE request failed";
            }
        } finally {
            connection.disconnect();
        }
    }
}

// 2. OkHttp Helper
public class OkHttpHelper {
    private OkHttpClient client;
    private String baseUrl;

    public OkHttpHelper(String baseUrl) {
        this.baseUrl = baseUrl;
        this.client = new OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)
            .build();
    }

    public OkHttpHelper(String baseUrl, int timeoutSeconds) {
        this.baseUrl = baseUrl;
        this.client = new OkHttpClient.Builder()
            .connectTimeout(timeoutSeconds, TimeUnit.SECONDS)
            .readTimeout(timeoutSeconds, TimeUnit.SECONDS)
            .writeTimeout(timeoutSeconds, TimeUnit.SECONDS)
            .build();
    }

    // GET request
    public String get(String endpoint) throws IOException {
        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "GET request failed: " + response.code();
            }
        }
    }

    // GET with query parameters
    public String get(String endpoint, Map<String, String> queryParams) throws IOException {
        HttpUrl.Builder urlBuilder = HttpUrl.parse(baseUrl + endpoint).newBuilder();

        if (queryParams != null) {
            for (Map.Entry<String, String> entry : queryParams.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
            }
        }

        Request request = new Request.Builder()
            .url(urlBuilder.build())
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "GET request failed: " + response.code();
            }
        }
    }

    // POST request with JSON body
    public String post(String endpoint, String jsonData) throws IOException {
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON, jsonData);

        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .post(body)
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "POST request failed: " + response.code();
            }
        }
    }

    // POST with form data
    public String postForm(String endpoint, Map<String, String> formData) throws IOException {
        FormBody.Builder formBuilder = new FormBody.Builder();

        if (formData != null) {
            for (Map.Entry<String, String> entry : formData.entrySet()) {
                formBuilder.add(entry.getKey(), entry.getValue());
            }
        }

        RequestBody body = formBuilder.build();
        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .post(body)
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "POST form request failed: " + response.code();
            }
        }
    }

    // PUT request
    public String put(String endpoint, String jsonData) throws IOException {
        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON, jsonData);

        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .put(body)
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "PUT request failed: " + response.code();
            }
        }
    }

    // DELETE request
    public String delete(String endpoint) throws IOException {
        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .delete()
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "DELETE request failed: " + response.code();
            }
        }
    }

    // Add headers
    public String getWithHeaders(String endpoint, Map<String, String> headers) throws IOException {
        Request.Builder requestBuilder = new Request.Builder()
            .url(baseUrl + endpoint)
            .get();

        if (headers != null) {
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                requestBuilder.addHeader(entry.getKey(), entry.getValue());
            }
        }

        Request request = requestBuilder.build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "GET request failed: " + response.code();
            }
        }
    }

    // Upload file
    public String uploadFile(String endpoint, File file, String contentType) throws IOException {
        MediaType MEDIA_TYPE = MediaType.parse(contentType);
        RequestBody requestBody = RequestBody.create(MEDIA_TYPE, file);

        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .post(requestBody)
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "File upload failed: " + response.code();
            }
        }
    }

    // Download file
    public boolean downloadFile(String endpoint, File destFile) throws IOException {
        Request request = new Request.Builder()
            .url(baseUrl + endpoint)
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                InputStream inputStream = response.body().byteStream();
                FileOutputStream outputStream = new FileOutputStream(destFile);

                byte[] buffer = new byte[4096];
                int bytesRead;

                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }

                outputStream.close();
                inputStream.close();

                return true;
            } else {
                return false;
            }
        }
    }
}

// 3. API Response Handler
public class ApiResponseHandler {
    public interface ResponseCallback {
        void onSuccess(String response);
        void onError(String errorMessage);
    }

    // Execute HTTP request asynchronously (using AsyncTask)
    public void executeAsync(final String url, final ResponseCallback callback) {
        new AsyncTask<Void, Void, String>() {
            private Exception exception;

            @Override
            protected String doInBackground(Void... voids) {
                try {
                    URL requestUrl = new URL(url);
                    HttpURLConnection connection = (HttpURLConnection) requestUrl.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);

                    int responseCode = connection.getResponseCode();

                    if (responseCode == HttpURLConnection.HTTP_OK) {
                        BufferedReader reader = new BufferedReader(
                            new InputStreamReader(connection.getInputStream())
                        );
                        StringBuilder response = new StringBuilder();
                        String line;

                        while ((line = reader.readLine()) != null) {
                            response.append(line);
                        }
                        reader.close();

                        return response.toString();
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    exception = e;
                    return null;
                }
            }

            @Override
            protected void onPostExecute(String response) {
                if (exception != null) {
                    callback.onError(exception.getMessage());
                } else if (response != null) {
                    callback.onSuccess(response);
                } else {
                    callback.onError("Request failed");
                }
            }
        }.execute();
    }
}

// 4. REST API Client
public class RestClient {
    private OkHttpHelper httpClient;
    private String apiToken;

    public RestClient(String baseUrl) {
        this.httpClient = new OkHttpHelper(baseUrl);
    }

    public RestClient(String baseUrl, String apiToken) {
        this.httpClient = new OkHttpHelper(baseUrl);
        this.apiToken = apiToken;
    }

    // Set authentication token
    public void setAuthToken(String token) {
        this.apiToken = token;
    }

    // Get with auth
    public String getAuth(String endpoint) throws IOException {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Bearer " + apiToken);
        return httpClient.getWithHeaders(endpoint, headers);
    }

    // Post with auth
    public String postAuth(String endpoint, String jsonData) throws IOException {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Bearer " + apiToken);

        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON, jsonData);

        Request request = new Request.Builder()
            .url(httpClient.baseUrl + endpoint)
            .post(body)
            .addHeader("Authorization", "Bearer " + apiToken)
            .build();

        try (Response response = httpClient.client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            } else {
                return "Request failed: " + response.code();
            }
        }
    }
}

// 5. Request Interceptor
public class RequestInterceptor implements Interceptor {
    private String authToken;

    public RequestInterceptor(String authToken) {
        this.authToken = authToken;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request originalRequest = chain.request();

        Request.Builder requestBuilder = originalRequest.newBuilder()
            .header("Accept", "application/json")
            .header("Content-Type", "application/json");

        if (authToken != null) {
            requestBuilder.header("Authorization", "Bearer " + authToken);
        }

        Request newRequest = requestBuilder.build();
        return chain.proceed(newRequest);
    }
}

// 6. Retry Interceptor
public class RetryInterceptor implements Interceptor {
    private int maxRetries;

    public RetryInterceptor(int maxRetries) {
        this.maxRetries = maxRetries;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Response response = null;
        IOException exception = null;

        for (int i = 0; i < maxRetries; i++) {
            try {
                response = chain.proceed(request);

                if (response.isSuccessful()) {
                    return response;
                }
            } catch (IOException e) {
                exception = e;

                if (i == maxRetries - 1) {
                    throw e;
                }

                try {
                    Thread.sleep(1000 * (i + 1));
                } catch (InterruptedException ie) {
                    Thread.currentThread().interrupt();
                    throw e;
                }
            }
        }

        if (response != null) {
            return response;
        }

        throw exception;
    }
}

// Main demonstration
public class HttpRequestDemo {
    public static void demonstrateHttpRequests() {
        System.out.println("=== Android Java HTTP Requests Examples ===\n");

        String baseUrl = "https://jsonplaceholder.typicode.com";

        // 1. HttpURLConnection
        System.out.println("--- 1. HttpURLConnection GET ---");
        try {
            BasicHttpURLConnection httpConnection = new BasicHttpURLConnection(baseUrl);
            String response = httpConnection.get("/posts/1");
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // 2. OkHttp GET
        System.out.println("\n--- 2. OkHttp GET ---");
        try {
            OkHttpHelper okHttp = new OkHttpHelper(baseUrl);
            String response = okHttp.get("/posts/1");
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // 3. POST request
        System.out.println("\n--- 3. POST Request ---");
        try {
            OkHttpHelper okHttp = new OkHttpHelper(baseUrl);
            String jsonData = "{\"title\": \"Test\", \"body\": \"Test body\", \"userId\": 1}";
            String response = okHttp.post("/posts", jsonData);
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // 4. GET with query parameters
        System.out.println("\n--- 4. GET with Query Parameters ---");
        try {
            OkHttpHelper okHttp = new OkHttpHelper(baseUrl);
            Map<String, String> params = new HashMap<>();
            params.put("userId", "1");
            String response = okHttp.get("/posts", params);
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // 5. PUT request
        System.out.println("\n--- 5. PUT Request ---");
        try {
            OkHttpHelper okHttp = new OkHttpHelper(baseUrl);
            String jsonData = "{\"id\": 1, \"title\": \"Updated Title\", \"body\": \"Updated body\", \"userId\": 1}";
            String response = okHttp.put("/posts/1", jsonData);
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // 6. DELETE request
        System.out.println("\n--- 6. DELETE Request ---");
        try {
            OkHttpHelper okHttp = new OkHttpHelper(baseUrl);
            String response = okHttp.delete("/posts/1");
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        // 7. POST with form data
        System.out.println("\n--- 7. POST with Form Data ---");
        try {
            OkHttpHelper okHttp = new OkHttpHelper(baseUrl);
            Map<String, String> formData = new HashMap<>();
            formData.put("username", "testuser");
            formData.put("password", "testpass");
            String response = okHttp.postForm("/posts", formData);
            System.out.println("Response: " + response);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }

        System.out.println("\n=== All HTTP Request Examples Completed ===");
    }
}

💻 WebView-Integration java

🟡 intermediate ⭐⭐⭐⭐

Web-Inhalte in Android-Anwendungen einbetten mit WebView und JavaScript-Brücke

⏱️ 35 min 🏷️ java, android, webview, javascript
Prerequisites: Intermediate Java, Android WebView, JavaScript
// Android Java WebView Integration Examples
// Using WebView to display web content and enable JavaScript communication

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.*;
import java.util.ArrayList;
import java.util.List;

// 1. Basic WebView Setup
public class BasicWebViewHelper {
    private Activity activity;
    private WebView webView;

    public BasicWebViewHelper(Activity activity) {
        this.activity = activity;
        this.webView = new WebView(activity);
        setupWebView();
    }

    public BasicWebViewHelper(Activity activity, WebView webView) {
        this.activity = activity;
        this.webView = webView;
        setupWebView();
    }

    private void setupWebView() {
        // Enable JavaScript
        webView.getSettings().setJavaScriptEnabled(true);

        // Enable DOM storage
        webView.getSettings().setDomStorageEnabled(true);

        // Enable zoom
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);

        // Improve rendering
        webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

        // Enable mixed content (for HTTPS pages with HTTP resources)
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }

        // Set WebViewClient
        webView.setWebViewClient(new WebViewClient());

        // Set WebChromeClient
        webView.setWebChromeClient(new WebChromeClient());
    }

    public WebView getWebView() {
        return webView;
    }

    // Load URL
    public void loadUrl(String url) {
        webView.loadUrl(url);
    }

    // Load HTML string
    public void loadData(String htmlData) {
        webView.loadDataWithBaseURL(null, htmlData, "text/html", "UTF-8", null);
    }

    // Load file from assets
    public void loadFileFromAssets(String fileName) {
        webView.loadUrl("file:///android_asset/" + fileName);
    }

    // Go back
    public void goBack() {
        if (webView.canGoBack()) {
            webView.goBack();
        }
    }

    // Go forward
    public void goForward() {
        if (webView.canGoForward()) {
            webView.goForward();
        }
    }

    // Reload
    public void reload() {
        webView.reload();
    }

    // Stop loading
    public void stopLoading() {
        webView.stopLoading();
    }

    // Clear cache
    public void clearCache() {
        webView.clearCache(true);
    }

    // Clear history
    public void clearHistory() {
        webView.clearHistory();
    }
}

// 2. Custom WebViewClient
public class CustomWebViewClient extends WebViewClient {
    private PageLoadListener pageLoadListener;

    public interface PageLoadListener {
        void onPageStarted(String url);
        void onPageFinished(String url);
        void onPageLoadError(String url, int errorCode);
    }

    public void setPageLoadListener(PageLoadListener listener) {
        this.pageLoadListener = listener;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        if (pageLoadListener != null) {
            pageLoadListener.onPageStarted(url);
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if (pageLoadListener != null) {
            pageLoadListener.onPageFinished(url);
        }
    }

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        if (pageLoadListener != null && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            pageLoadListener.onPageLoadError(request.getUrl().toString(), error.getErrorCode());
        }
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            String url = request.getUrl().toString();

            // Handle special URLs
            if (url.startsWith("tel:")) {
                // Handle phone number
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                view.getContext().startActivity(intent);
                return true;
            } else if (url.startsWith("mailto:")) {
                // Handle email
                Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
                view.getContext().startActivity(intent);
                return true;
            } else if (url.startsWith("myapp://")) {
                // Handle deep links
                handleDeepLink(url);
                return true;
            }
        }

        return super.shouldOverrideUrlLoading(view, request);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // Fallback for older API levels
        if (url.startsWith("tel:") || url.startsWith("mailto:") || url.startsWith("myapp://")) {
            return shouldOverrideUrlLoading(view,
                android.webkit.WebResourceRequest.builder().url(Uri.parse(url)).build());
        }
        return false;
    }

    private void handleDeepLink(String deepLink) {
        // Handle app-specific deep links
        System.out.println("Deep link: " + deepLink);
    }
}

// 3. Custom WebChromeClient
public class CustomWebChromeClient extends WebChromeClient {
    private ProgressListener progressListener;
    private TitleListener titleListener;

    public interface ProgressListener {
        void onProgressChanged(int progress);
    }

    public interface TitleListener {
        void onTitleChanged(String title);
    }

    public void setProgressListener(ProgressListener listener) {
        this.progressListener = listener;
    }

    public void setTitleListener(TitleListener listener) {
        this.titleListener = listener;
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);
        if (progressListener != null) {
            progressListener.onProgressChanged(newProgress);
        }
    }

    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        if (titleListener != null) {
            titleListener.onTitleChanged(title);
        }
    }

    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        // Handle JavaScript alert
        showAlertDialog(message, result);
        return true;
    }

    @Override
    public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
        // Handle JavaScript confirm
        showConfirmDialog(message, result);
        return true;
    }

    private void showAlertDialog(String message, final JsResult result) {
        // Show alert dialog
        new android.app.AlertDialog.Builder(view.getContext())
            .setMessage(message)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    result.confirm();
                }
            })
            .setCancelable(false)
            .show();
    }

    private void showConfirmDialog(String message, final JsResult result) {
        // Show confirm dialog
        new android.app.AlertDialog.Builder(view.getContext())
            .setMessage(message)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    result.confirm();
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    result.cancel();
                }
            })
            .setCancelable(false)
            .show();
    }
}

// 4. JavaScript Interface
public class JavaScriptInterface {
    private Context context;
    private WebCallback callback;

    public JavaScriptInterface(Context context) {
        this.context = context;
    }

    public void setCallback(WebCallback callback) {
        this.callback = callback;
    }

    // Method callable from JavaScript
    @android.webkit.JavascriptInterface
    public void showToast(String message) {
        android.widget.Toast.makeText(context, message, android.widget.Toast.LENGTH_SHORT).show();
    }

    @android.webkit.JavascriptInterface
    public void sendMessage(String message) {
        System.out.println("Message from JavaScript: " + message);
        if (callback != null) {
            callback.onMessage(message);
        }
    }

    @android.webkit.JavascriptInterface
    public String getData() {
        return "Data from Android";
    }

    @android.webkit.JavascriptInterface
    public int add(int a, int b) {
        return a + b;
    }

    public interface WebCallback {
        void onMessage(String message);
    }
}

// 5. WebView Communication Helper
public class WebViewCommunicationHelper {
    private WebView webView;

    public WebViewCommunicationHelper(WebView webView) {
        this.webView = webView;
    }

    // Add JavaScript interface
    public void addJavaScriptInterface(Object object, String name) {
        webView.addJavascriptInterface(object, name);
    }

    // Execute JavaScript
    public void executeJavaScript(String script) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            webView.evaluateJavascript(script, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String value) {
                    System.out.println("JavaScript result: " + value);
                }
            });
        } else {
            webView.loadUrl("javascript:" + script);
        }
    }

    // Call JavaScript function
    public void callJavaScriptFunction(String functionName, Object... args) {
        StringBuilder script = new StringBuilder();
        script.append(functionName).append("(");

        for (int i = 0; i < args.length; i++) {
            if (i > 0) {
                script.append(", ");
            }

            Object arg = args[i];
            if (arg instanceof String) {
                script.append("'").append(arg).append("'");
            } else {
                script.append(arg);
            }
        }

        script.append(")");
        executeJavaScript(script.toString());
    }

    // Inject JavaScript
    public void injectJavaScript(String jsCode) {
        executeJavaScript("(function(){" + jsCode + "})()");
    }
}

// 6. Cookie Manager
public class WebViewCookieManager {
    private CookieManager cookieManager;

    public WebViewCookieManager() {
        this.cookieManager = CookieManager.getInstance();
        setupCookieManager();
    }

    private void setupCookieManager() {
        cookieManager.setAcceptCookie(true);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.setAcceptThirdPartyCookies(webView, true);
        }
    }

    // Set cookie
    public void setCookie(String url, String cookieValue) {
        cookieManager.setCookie(url, cookieValue);
    }

    // Get cookie
    public String getCookie(String url) {
        return cookieManager.getCookie(url);
    }

    // Clear all cookies
    public void clearAllCookies() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.removeAllCookies(null);
        } else {
            cookieManager.removeAllCookie();
        }
    }

    // Clear session cookies
    public void clearSessionCookies() {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.removeSessionCookies(null);
        } else {
            cookieManager.removeSessionCookie();
        }
    }
}

// 7. WebView Cache Manager
public class WebViewCacheManager {
    private WebView webView;

    public WebViewCacheManager(WebView webView) {
        this.webView = webView;
    }

    // Enable cache
    public void enableCache() {
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setDatabaseEnabled(true);
    }

    // Disable cache
    public void disableCache() {
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    }

    // Load from cache only
    public void loadFromCacheOnly() {
        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
    }

    // Clear all cache
    public void clearAllCache() {
        webView.clearCache(true);
    }

    // Clear cache for specific URL
    public void clearCacheForUrl(String url) {
        // This would require more complex implementation
        webView.clearCache(true);
    }
}

// Main demonstration
public class WebViewIntegrationDemo {
    public static void demonstrateWebViewIntegration(Activity activity) {
        System.out.println("=== Android Java WebView Integration Examples ===\n");

        // 1. Basic WebView setup
        System.out.println("--- 1. Basic WebView Setup ---");
        BasicWebViewHelper webViewHelper = new BasicWebViewHelper(activity);
        WebView webView = webViewHelper.getWebView();

        // 2. Load URL
        System.out.println("\n--- 2. Load URL ---");
        webViewHelper.loadUrl("https://www.example.com");

        // 3. Load HTML data
        System.out.println("\n--- 3. Load HTML Data ---");
        String htmlContent = "<html><body><h1>Hello WebView!</h1></body></html>";
        webViewHelper.loadData(htmlContent);

        // 4. Custom WebViewClient
        System.out.println("\n--- 4. Custom WebViewClient ---");
        CustomWebViewClient customClient = new CustomWebViewClient();
        customClient.setPageLoadListener(new CustomWebViewClient.PageLoadListener() {
            @Override
            public void onPageStarted(String url) {
                System.out.println("Page started loading: " + url);
            }

            @Override
            public void onPageFinished(String url) {
                System.out.println("Page finished loading: " + url);
            }

            @Override
            public void onPageLoadError(String url, int errorCode) {
                System.out.println("Page load error: " + url + " (" + errorCode + ")");
            }
        });

        webView.setWebViewClient(customClient);

        // 5. JavaScript interface
        System.out.println("\n--- 5. JavaScript Interface ---");
        JavaScriptInterface jsInterface = new JavaScriptInterface(activity);
        webView.addJavascriptInterface(jsInterface, "Android");

        // Call JavaScript from Android
        WebViewCommunicationHelper commHelper = new WebViewCommunicationHelper(webView);
        commHelper.executeJavaScript("alert('Hello from Android!')");

        // Call JavaScript function
        commHelper.callJavaScriptFunction("updateContent", "New Content");

        // 6. Inject JavaScript
        System.out.println("\n--- 6. Inject JavaScript ---");
        String jsCode = "document.body.style.backgroundColor = 'lightgray';";
        commHelper.injectJavaScript(jsCode);

        // 7. Cookie management
        System.out.println("\n--- 7. Cookie Management ---");
        WebViewCookieManager cookieManager = new WebViewCookieManager();
        cookieManager.setCookie("https://www.example.com", "user=JohnDoe; max-age=3600");

        String cookie = cookieManager.getCookie("https://www.example.com");
        System.out.println("Cookie: " + cookie);

        // 8. Cache management
        System.out.println("\n--- 8. Cache Management ---");
        WebViewCacheManager cacheManager = new WebViewCacheManager(webView);
        cacheManager.enableCache();

        // 9. WebView history
        System.out.println("\n--- 9. WebView History ---");
        System.out.println("Can go back: " + webView.canGoBack());
        System.out.println("Can go forward: " + webView.canGoForward());

        webViewHelper.goBack();
        webViewHelper.goForward();

        System.out.println("\n=== All WebView Integration Examples Completed ===");
    }
}