Je travaille sur l'écriture d'un programme simple de conversion de température, pour me familiariser avec la programmation Android. L'utilisateur tape un nombre en EditText, et il le convertit de Fahrenheit en Celsius, ou vice versa, puis met la réponse dans un TextView. Je souhaite ajouter un symbole Unicode Celsius / Fahrenheit à la fin de la réponse avant de l'afficher. Quand je ne l'ai pas ajouté au symbole, cela fonctionne bien et affiche le bon nombre, mais quand il essaie d'ajouter le symbole à la fin, la sortie affiche tout faux, avec une longue chaîne de nombres à la fin (et toujours pas de symbole Unicode).

Voici mon code:

Voici la classe d'utilitaire de conversion:

public class ConverterUtil {

    //Convert to celsius
    public static String convertFahrenheitToCelsius(float fahrenheit) {
        float temperature = (fahrenheit - 32) * 5 / 9;
        DecimalFormat df = new DecimalFormat("#.#");
        return df.format(temperature) + R.string.celsius_symbol;
    }

    //Convert to fahrenheit
    public static String convertCelsiustoFahrenheit(float celsius) {
        float temperature = (celsius * 9) / 5 + 32; //Append the unicode Celsius symbol (\u2103), then return

        DecimalFormat df = new DecimalFormat("#.#");a
        return df.format(temperature) + R.string.fahrenheit_symbol; //Append the unicode Fahrenheit symbol (\u2109), then return
    }
}

Et c'est là que je l'appelle:

public void calculateTemperature(){

        RadioButton celsiusButton = (RadioButton) findViewById(R.id.button2);
        TextView output = (TextView) findViewById(R.id.output);

        if (text.getText().length() == 0) {
            output.setText("");
            return;
        }

        float inputValue = Float.parseFloat(text.getText().toString());
        String outputText = celsiusButton.isChecked() ? ConverterUtil.convertFahrenheitToCelsius(inputValue) : ConverterUtil.convertCelsiustoFahrenheit(inputValue);

        output.setText(outputText);
    }

Si je retire la partie où j'ajoute les symboles Unicode, cela ressemble à ceci: entrez la description de l'image ici

Et si je remets ça dedans, j'obtiens ceci: entrez la description de l'image ici

Comment puis-je résoudre ce problème?

1
user5457243 25 déc. 2015 à 20:57

2 réponses

Meilleure réponse

On dirait que le resourceID de votre fahrenheit_symbol & celsius_symbol est ajouté à votre texte plutôt que le caractère réel.

Essaye ça,

public class ConverterUtil {

    //Convert to celsius
    public static String convertFahrenheitToCelsius(Context context, float fahrenheit) {
        float temperature = (fahrenheit - 32) * 5 / 9;
        DecimalFormat df = new DecimalFormat("#.#");
        return df.format(temperature) + context.getResources().getString(R.string.celsius_symbol);
    }

    //Convert to fahrenheit
    public static String convertCelsiustoFahrenheit(Context context, float celsius) {
        float temperature = (celsius * 9) / 5 + 32; //Append the unicode Celsius symbol (\u2103), then return

        DecimalFormat df = new DecimalFormat("#.#");a
        return df.format(temperature) + context.getResources().getString(R.string.fahrenheit_symbol); //Append the unicode Fahrenheit symbol (\u2109), then return
    }
}

Changez où vous l'appelez comme ça,

public void calculateTemperature(){

    RadioButton celsiusButton = (RadioButton) findViewById(R.id.button2);
    TextView output = (TextView) findViewById(R.id.output);

    if (text.getText().length() == 0) {
        output.setText("");
        return;
    }

    float inputValue = Float.parseFloat(text.getText().toString());
    String outputText = celsiusButton.isChecked() ? ConverterUtil.convertFahrenheitToCelsius(YourActivity.this, inputValue) : ConverterUtil.convertCelsiustoFahrenheit(YourActivity.this, inputValue);

    output.setText(outputText);
}
0
K Neeraj Lal 25 déc. 2015 à 18:02

Changement

return df.format(temperature) + R.string.fahrenheit_symbol;
return df.format(temperature) + R.string.celsius_symbol;

À

return df.format(temperature) + getString(R.string.fahrenheit_symbol);
return df.format(temperature) + getString(R.string.celsius_symbol);

R.string.fahrenheit_symbol et R.string.celsius_symbol sont tous deux des entiers. Vous devrez rechercher la ressource de chaîne appropriée en utilisant Context.getResources().getString().

Vous devrez passer un Context (tel que l'appel Activity) à votre ConverterUtil.

0
Ken Wolf 25 déc. 2015 à 18:02