1

Android アプリケーションで、値を保存しようとするとアプリがクラッシュするという問題が発生しています。私はオンライン通貨コンバーターを作っています。ここに私のコードの私の部分があります:

View.OnClickListener myhandler1 = new View.OnClickListener() {
    @Override
    public void onClick(View v) {



        String text1 = spinner1.getSelectedItem().toString().trim();
        String text2 = spinner2.getSelectedItem().toString().trim();

        if (text1.equals("US Dollar - USD") && text2.equals("Euro - EUR") && edittextdollars.length() > 0 && edittexteuros.length()==0) {
            try {
            convertvalues("USD", "EUR");
            float k = Float.parseFloat(convertvalues("USD", "EUR"));
            SharedPreferences settings = getActivity().getSharedPreferences("Pref", 0);
            SharedPreferences.Editor editor = settings.edit();
            editor.putFloat("dollarseuros", k);
            editor.commit();
            }
            catch (Exception e) {
                SharedPreferences settings = getActivity().getSharedPreferences("Pref", 0);
                float val = Float.parseFloat(edittextdollars.getText().toString());
                float k = Float.parseFloat(convertvalues("USD", "EUR"));
                DecimalFormat df = new DecimalFormat(".##");
                String l = df.format(k * val);
                edittexteuros.setText(settings.getString("dollarseuros", l));
            }
        }

私のアプリが行うことになっているのは、米ドルからユーロへのレートの値を取得し、インターネット接続がなくなるまで保存することです。インターネット接続が利用できない場合は、キャッシュされた値を使用することになっています。

これが私のLogCatです:

07-24 00:16:14.804: E/AndroidRuntime(1298): FATAL EXCEPTION: main
07-24 00:16:14.804: E/AndroidRuntime(1298): java.lang.NumberFormatException: Invalid float: ""
07-24 00:16:14.804: E/AndroidRuntime(1298):     at java.lang.StringToReal.invalidReal(StringToReal.java:63)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at java.lang.StringToReal.parseFloat(StringToReal.java:289)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at java.lang.Float.parseFloat(Float.java:300)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at com.example.currencyconverter.MainActivity$1.onClick(MainActivity.java:240)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at android.view.View.performClick(View.java:4204)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at android.view.View$PerformClick.run(View.java:17355)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at android.os.Handler.handleCallback(Handler.java:725)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at android.os.Looper.loop(Looper.java:137)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at java.lang.reflect.Method.invokeNative(Native Method)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at java.lang.reflect.Method.invoke(Method.java:511)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-24 00:16:14.804: E/AndroidRuntime(1298):     at dalvik.system.NativeStart.main(Native Method)

なにが問題ですか?Google と StackOverflow を確認しましたが、問題が解決しません。どんな助けでも大歓迎です。

4

1 に答える 1

2

NumberFormatExceptionつまり、Float.parseFloat(stringToParse) ではフロートstringToParseに解析できません。

たとえば、Float.parseFloat("")orは空の文字列orを float 値に解析できないため、Float.parseFloat("Not a float")をスローします。Float.parseFloat() に何を供給しているかを確認すると、この問題を解決できます。NumberFormatException"""Now a float"

編集

convertvalues()あなたが今投稿した方法に基づいて:

public String convertvalues(String convertfrom, String convertto) {
                double current;
                double val = Double.parseDouble(
                                edittextdollars.getText().toString());
                DecimalFormat df = new DecimalFormat(".##");
                 YahooCurrencyConverter ycc = new YahooCurrencyConverter();                  
                     try {
                        current = ycc.convert(convertfrom, convertto);
                        edittexteuros.setText(df.format(val*current)); 
                        return "";    //           <----------- Problem
                        }
                    catch (Exception e) {

                        return "";    //           <----------- Could be a problem
                    } 
}

あなたのconvertvalues()メソッドは、何があっても空の文字列を返します。try ブロックと catch ブロックの両方で空の文字列を返しています。これはあなたが本当に返したいものですか?

于 2013-07-24T00:32:16.487 に答える