Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Conversor

Buen día

Compañeros ya realice el proyecto pero me gastaría mejorarlo, quiero integrar una Api que me de los valores TMR actualizados a la fecha pero no la he podido integrar , aun siguiendo los pasos de la documentación de la api. ¿Me pueden ayudar?

Clase InterfazGrafica

package com.conversor.col;

import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class InterfazGrafica extends JFrame {
    private JTextField cantidadTextField;
    private JLabel resultadoLabel;

    private JMenuBar menuBar;
    private JMenu menu;
    private JMenuItem opcion1;
    private JMenuItem opcion2;
    private JMenuItem opcion3;
    private JMenuItem opcion4;
    private JMenuItem opcion5;

    public InterfazGrafica() {
        setSize(600, 400);
        setTitle("Conversor Moneda Alura");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setBackground(new Color(240, 240, 240));

        JPanel panel = new JPanel();
        mostrarMenu();
        panel.add(menuBar);
        add(panel);

        cantidadTextField = new JTextField(10);
        panel.add(cantidadTextField);

        resultadoLabel = new JLabel("Resultado:");
        resultadoLabel.setFont(new Font("Comic Sans MS", Font.BOLD, 20));
        resultadoLabel.setForeground(Color.BLUE);
        panel.add(resultadoLabel);
    }

    public void mostrarMenu() {
        menuBar = new JMenuBar();
        menu = new JMenu("Elija una opción válida");
        menu.setFont(new Font("Comic Sans MS", Font.PLAIN, 18));
        opcion1 = new JMenuItem("Pesos a Dólares");
        opcion2 = new JMenuItem("Pesos a Euros");
        opcion3 = new JMenuItem("Pesos a Real Brasileño");
        opcion4 = new JMenuItem("Pesos a Yenes");
        opcion5 = new JMenuItem("Salir");

        opcion1.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        opcion2.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        opcion3.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        opcion4.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));
        opcion5.setFont(new Font("Comic Sans MS", Font.PLAIN, 16));

        menu.add(opcion1);
        menu.add(opcion2);
        menu.add(opcion3);
        menu.add(opcion4);
        menu.add(opcion5);

        menuBar.add(menu);

        opcion1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                conversion("USD", "Dólares");
            }
        });

        opcion2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                conversion("EUR", "Euros");
            }
        });

        opcion3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                conversion("BRL", "Real Brasileño");
            }
        });

        opcion4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                conversion("JPY", "Yenes");
            }
        });

        opcion5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Saliendo del programa...");
                System.exit(0);
            }
        });
    }

    private void conversion(String currencyCode, String pais) {
        try {
            double cantidadMoneda = Double.parseDouble(cantidadTextField.getText());

            // Utilizamos ExchangeRatesAPI para obtener la tasa de cambio en tiempo real
            Api api = new Api();
            double exchangeRate = api.getExchangeRate(currencyCode);
            double moneda = cantidadMoneda / exchangeRate;
//            System.out.println(exchangeRate);
//            System.out.println(cantidadMoneda);
            System.out.println(currencyCode);
            moneda = (double) Math.round(moneda * 100d) / 100;

            resultadoLabel.setText("Resultado: Tienes $" + moneda + " " + pais);
        } catch (NumberFormatException ex) {
            resultadoLabel.setText("Error: Ingrese una cantidad válida");
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                InterfazGrafica ventana = new InterfazGrafica();
                ventana.setVisible(true);
            }
        });
    }
}
2 respuestas

Api

package com.conversor.col;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONObject;

public class Api {

private static final String API_KEY = "bbbcf7cb26af0b58f205c386ed94f2d5"; // Reemplaza esto con tu clave de API
private static final String BASE_URL = "http://api.exchangeratesapi.io/v1";

public double getExchangeRate(String currencyCode) {
    double exchangeRate = 0.0; // Valor predeterminado para la moneda base (COP)

    try {
        String endpoint = "/latest";
        String accessKey = API_KEY;
        String exchangeRatesUrl = BASE_URL + endpoint + "?access_key=" + accessKey;
        String exchangeRatesJson = fetchDataFromURL(exchangeRatesUrl);
        JSONObject jsonObject = new JSONObject(exchangeRatesJson);

        if (jsonObject.getBoolean("success")) {
            JSONObject ratesObject = jsonObject.getJSONObject("rates");
            exchangeRate = ratesObject.getFloat(currencyCode);
            System.out.println(exchangeRate);
        } else {
            System.out.println("No se pudo obtener la tasa de cambio para " + currencyCode);
        }
    } catch (Exception e) {
        System.out.println("Error al obtener los datos de conversión: " + e.getMessage());
    }

    return exchangeRate;
}

private String fetchDataFromURL(String urlStr) {
    StringBuilder content = new StringBuilder();

    try {
        URL url = new URL(urlStr);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            content.append(line);
        }
        reader.close();
        connection.disconnect();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return content.toString();
}

}

Hola Héctor, espero que estés bien.

Dado que no mencionaste el problema específico que estás teniendo, aquí hay algunas consideraciones generales y pasos que podrían ayudarte:

  • Verificar la Clave de API: Asegúrate de que la clave de API que estás utilizando en la clase Api sea válida y esté activa. La clave de API es necesaria para autenticarte con la API y obtener los datos de tasas de cambio.

  • Manejo de Excepciones: En la clase Api, estás capturando excepciones y mostrando mensajes de error en la consola, pero no estás tomando ninguna acción en la interfaz gráfica para manejar estos errores. Considera mostrar mensajes de error en la interfaz gráfica en lugar de solo imprimirlos en la consola.

  • Dependencias: Asegúrate de que estás importando las bibliotecas y dependencias necesarias para tu proyecto. En este caso, estás utilizando la biblioteca org.json para manejar los objetos JSON. Asegúrate de tener esta biblioteca en tu proyecto.

  • Control de Errores: Verifica si la API ExchangeRatesAPI está funcionando correctamente. Puedes probar la URL de la API en tu navegador para verificar si está devolviendo los datos esperados. Si la API no está respondiendo como esperas, podría haber un problema en el lado de la API.

  • Actualizar Mensajes de Interfaz: Si encuentras algún error en la conexión a la API o en la obtención de datos de tasas de cambio, asegúrate de actualizar los mensajes en la interfaz gráfica para informar al usuario sobre el problema.

  • Depuración: Si sigues teniendo problemas, agrega declaraciones de impresión o registros en puntos clave de tu código para rastrear cómo se está ejecutando el flujo y dónde podrían estar ocurriendo los problemas.

Si puedes proporcionar más detalles sobre el problema específico que estás enfrentando al intentar integrar la API y cómo se manifiesta en tu proyecto, estaré encantado de proporcionarte más orientación y ayuda.

¡Saludos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios