-1

1 つの URL から緯度と経度を取得しています。私のコーディングでは、 if(lat==1.3005060 && lng== 103.8745850) のようになり、次のクラス map.java が開きます。そうでなければ、無効なマップです。

テキストビューとして表示するために、最初に文字列として宣言しました。次に、onClick メソッドで float として宣言し、Google マップに渡すことができるようにしました。ただし、強制終了エラーが発生しています。誰かが私を案内できますか?

LogCat エラー:

08-14 11:07:13.190: E/AndroidRuntime(457): FATAL EXCEPTION: main
08-14 11:07:13.190: E/AndroidRuntime(457): java.lang.IllegalStateException: Could not execute method of the activity
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.view.View$1.onClick(View.java:2185)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.view.View.performClick(View.java:2585)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.view.View$PerformClick.run(View.java:9299)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.os.Handler.handleCallback(Handler.java:587)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.os.Handler.dispatchMessage(Handler.java:92)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.os.Looper.loop(Looper.java:130)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.app.ActivityThread.main(ActivityThread.java:3691)
08-14 11:07:13.190: E/AndroidRuntime(457):  at java.lang.reflect.Method.invokeNative(Native Method)
08-14 11:07:13.190: E/AndroidRuntime(457):  at java.lang.reflect.Method.invoke(Method.java:507)
08-14 11:07:13.190: E/AndroidRuntime(457):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
08-14 11:07:13.190: E/AndroidRuntime(457):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
08-14 11:07:13.190: E/AndroidRuntime(457):  at dalvik.system.NativeStart.main(Native Method)
08-14 11:07:13.190: E/AndroidRuntime(457): Caused by: java.lang.reflect.InvocationTargetException
08-14 11:07:13.190: E/AndroidRuntime(457):  at java.lang.reflect.Method.invokeNative(Native Method)
08-14 11:07:13.190: E/AndroidRuntime(457):  at java.lang.reflect.Method.invoke(Method.java:507)
08-14 11:07:13.190: E/AndroidRuntime(457):  at android.view.View$1.onClick(View.java:2180)
08-14 11:07:13.190: E/AndroidRuntime(457):  ... 11 more
08-14 11:07:13.190: E/AndroidRuntime(457): Caused by: java.lang.NumberFormatException: latitude
08-14 11:07:13.190: E/AndroidRuntime(457):  at org.apache.harmony.luni.util.FloatingPointParser.initialParse(FloatingPointParser.java:114)
08-14 11:07:13.190: E/AndroidRuntime(457):  at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:319)
08-14 11:07:13.190: E/AndroidRuntime(457):  at java.lang.Float.parseFloat(Float.java:323)
08-14 11:07:13.190: E/AndroidRuntime(457):  at com.example.fambond.SingleMenuItemActivity.onClick(SingleMenuItemActivity.java:75)
08-14 11:07:13.190: E/AndroidRuntime(457):  ... 14 more

singlemenu.java の私のコードの一部

public void onClick(View v) {
         //TODO Auto-generated method stub
    float lat=Float.parseFloat(KEY_LATITUDE);
    float lng =Float.parseFloat(KEY_LONGITUDE);
    if(lat==1.3005060 && lng== 103.8745850){ 
    Log.d("coords", "lat: " + KEY_LATITUDE + " long: " + KEY_LONGITUDE);
    Intent intent = new Intent(SingleMenuItemActivity.this,map.class);
    intent.putExtra("MAP",KEY_LATITUDE.toString());
    intent.putExtra("MAP",KEY_LONGITUDE.toString());
    startActivity(intent);

    }
    else
    {
        Toast.makeText(SingleMenuItemActivity.this, "Invalid MAP", Toast.LENGTH_LONG).show();
    }
}
4

1 に答える 1

0

==問題は、浮動小数点数と符号を比較しているようです。float が「等しい」かどうかをテストする正しい方法は次のとおりです。

if( (Math.abs(lat-1.3005060) < epsilon) && (Math.abs(lng-103.8745850) < epsilon) ){
}

ここで、epsilon は、目的の精度に応じて、0.00000001 のような非常に小さい数値です。

Java でフロートを比較するために == を使用することの何が問題なのですか? を参照してください。Javaの質問で浮動小数点を操作して比較する 詳細については。

于 2013-08-14T03:19:52.423 に答える