0

JSONドキュメントから座標を取得し、この文字列を倍精度に変換し、この倍精度を使用してGoogleマップにオーバーレイを作成するAndroid用のアプリケーションをコーディングしています。

しかし、NumberFormatException という例外が発生します。

    public class LagerActivity extends Activity {

private static String url = "http://agent.nocrew.org/api/json/1.0/searchStore.json?limit=500";

static final String TAG_ITEMS = "items";
static final String TAG_LAT = "lat";
static final String TAG_LNG = "lng";

private GoogleMap mMap;
private LocationManager locationManager;

JSONArray items = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lager);
    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
            .getMap();

    // Creating JSON Parser instance
    JSONparser jParser = new JSONparser();
    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(url);

    try {
        // Getting Array of Contacts
        items = json.getJSONArray(TAG_ITEMS);
        // looping through All Contacts
        for (int i = 0; i < items.length(); i++) {
            JSONObject c = items.getJSONObject(i);

            // Storing each json item in variable
            String lat = c.getString(TAG_LAT);
            String lng = c.getString(TAG_LNG);

            // lat = lat.replace(",", ".");
            // lng = lng.replace(",", ".");

            // Log.e(lat, lng);

            double lati = Double.parseDouble(lat);

            Log.d(Double.toString(lati), " ");

            // LatLng point = new LatLng(Double.parseDouble(lat),
            // Double.parseDouble(lng));
                // mMap.addMarker(new MarkerOptions().position(point)
            // .title("Karls räkor & hund")
            // .snippet("blaha, ehehe"));

        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

}

    }

これが私のlogcatです:

    01-11 18:10:23.294: W/dalvikvm(22718): threadid=1: thread exiting with uncaught         exception (group=0x40e86930)
    01-11 18:10:23.294: E/AndroidRuntime(22718): FATAL EXCEPTION: main
    01-11 18:10:23.294: E/AndroidRuntime(22718): java.lang.RuntimeException: Unable to  start activity               ComponentInfo{com.example.checkmypint/com.example.checkmypint.LagerActivity}:    java.lang.NumberFormatException: Invalid double: ""
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at         android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at   android.app.ActivityThread.access$600(ActivityThread.java:141)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at  android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at android.os.Handler.dispatchMessage(Handler.java:99)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at android.os.Looper.loop(Looper.java:137)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at android.app.ActivityThread.main(ActivityThread.java:5039)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at java.lang.reflect.Method.invokeNative(Native Method)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at java.lang.reflect.Method.invoke(Method.java:511)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at dalvik.system.NativeStart.main(Native Method)
    01-11 18:10:23.294: E/AndroidRuntime(22718): Caused by: java.lang.NumberFormatException: Invalid double: ""
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at java.lang.StringToReal.parseDouble(StringToReal.java:248)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at java.lang.Double.parseDouble(Double.java:295)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at com.example.checkmypint.LagerActivity.onCreate(LagerActivity.java:65)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at android.app.Activity.performCreate(Activity.java:5104)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    01-11 18:10:23.294: E/AndroidRuntime(22718):    ... 11 more

アニーのアイデアを持っている人はいますか? logcat は、JSON からのデータがあることを示しています。

4

3 に答える 3

1

例外は、何が間違っているかを正確に伝えています。

NumberFormatException: 無効な double: ""

Double.parseDoublestringで使用しようとしています""。それは失敗します。""ケースを確認する必要があります。

String lat = c.getString(TAG_LAT);
double lati;

if (lat == null || lat.length == 0) {
    lati = /* use whatever default you want to use here */;
}
else {
    double lati = Double.parseDouble(lat);
}

...そして同様にlng、おそらく。

いずれにせよ、あるレベルで例外をキャッチして処理する必要があります(受信 JSON が本当に無効である場合lat: "foo"など)。を使用してインラインで処理します。latlngif

于 2013-01-12T11:30:38.090 に答える
0

空の緯度値を処理する必要があります。JSON戻り値にそのようなデータがあることがわかります:

{
    "address": "Breared, Vrångagatan 5",
    "city": "Varberg",
    "county": "Halland",
    "county_id": 3,
    "lat": "",
    "lng": "",
    "id": 1331,
    "sysid": 1310
},

したがって、このコードは例外をスローします。

double lati = Double.parseDouble(lat);
于 2013-01-12T11:13:26.467 に答える
0

(null)条件をチェックしていないように見えますが、ここではnullである文字列値を解析していますが、例外はnull文字列をDoubleに解析できないことを示しています..したがって、解析する前にnull条件を確認する必要がありますダブルに..それを確認すると、問題が解決されます...お楽しみください..:-)

于 2013-01-12T11:10:24.493 に答える