我正在编写Android应用程序,它应该从JSON文档中获取坐标,将此字符串转换为double,然后使用此双打在Google地图上创建叠加层。
但我得到一个名为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
Annyone得到了一些想法? logcat告诉我我有来自JSON的数据。
答案 0 :(得分:1)
例外是告诉你完全出了什么问题:
NumberFormatException: Invalid double: ""
您正尝试在字符串Double.parseDouble
上使用""
。那失败了。您需要检查""
案例:
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"
或类似),但是因为显然有时输入数据已空白lat
或lng
,这不再是例外情况,因此您可以使用if
内联处理。
答案 1 :(得分:0)
看起来你没有检查(null)条件,在这里解析String值为null,异常显示它无法将null String解析为Double..So,你必须先检查 null 条件才能解析为Double ..检查一下,你的问题解决了......享受......: - )
答案 2 :(得分:0)
您需要处理空的lat值。我看到JSON返回中有这样的数据:
{
"address": "Breared, Vrångagatan 5",
"city": "Varberg",
"county": "Halland",
"county_id": 3,
"lat": "",
"lng": "",
"id": 1331,
"sysid": 1310
},
所以这段代码会引发异常:
double lati = Double.parseDouble(lat);