我正在开发小型应用程序以找到最近的atm。
在此我找到了我的位置,现在我要求访问谷歌的地方。
当我启动我的应用程序时,它最初显示我的位置,但几秒后它会自动崩溃。
我无法解决log cat。
它显示了一些错误,但如何追踪它。
这是我的logcat。
09-24 17:09:16.671: E/AndroidRuntime(12415): java.lang.NumberFormatException: Invalid double: ""
09-24 17:09:16.671: E/AndroidRuntime(12415): at java.lang.StringToReal.invalidReal(StringToReal.java:63)
09-24 17:09:16.671: E/AndroidRuntime(12415): at java.lang.StringToReal.parseDouble(StringToReal.java:248)
09-24 17:09:16.671: E/AndroidRuntime(12415): at java.lang.Double.parseDouble(Double.java:295)
09-24 17:09:16.671: E/AndroidRuntime(12415): at com.project.kamani.nearby.Map$ParserTask.onPostExecute(Map.java:305)
09-24 17:09:16.671: E/AndroidRuntime(12415): at com.project.kamani.nearby.Map$ParserTask.onPostExecute(Map.java:1)
09-24 17:09:16.671: E/AndroidRuntime(12415): at android.os.AsyncTask.finish(AsyncTask.java:631)
09-24 17:09:16.671: E/AndroidRuntime(12415): at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-24 17:09:16.671: E/AndroidRuntime(12415): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
在这里我注意发布完整的logcat我只是放了一些我觉得它可能显示错误的行。
这是我的代码。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isGooglePlayAvailable()) {
criteria = new Criteria();
setContentView(R.layout.mapdemo);
getGoogleMap();
getUserLocation();
Toast.makeText(this, "Latitude:" + lat + " Longitude:" + lang,
Toast.LENGTH_LONG).show();
getAddress(lat, lang);
drawMarker(lat, lang);
StringBuilder sb = new StringBuilder(
"https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
sb.append("location=" + lat + "," + lang);
sb.append("&radius=5000");
sb.append("&types=atm");
sb.append("&name=ATM");
sb.append("&sensor=false");
sb.append("&key=my api key");
PlacesTask placesTask = new PlacesTask();
placesTask.execute(sb.toString());
}
这里直到drawmarker()工作正常。
以下是Places Task类的代码。
private class PlacesTask extends AsyncTask<String, Integer, String> {
String data = null;
@Override
protected String doInBackground(String... url) {
try {
data = downloadUrl(url[0]);
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(String result) {
ParserTask parsertask = new ParserTask();
parsertask.execute(result);
}
}
以下是Parser Task的代码。
私有类ParserTask扩展了AsyncTask {
JSONObject jObject;
@Override
protected Place[] doInBackground(String... jsonData) {
Place[] places = null;
PlaceJSonParser placeJsonParser = new PlaceJSonParser();
try {
jObject = new JSONObject(jsonData[0]);
places = placeJsonParser.parse(jObject);
} catch (Exception e) {
Log.d("Exception", e.toString());
}
return places;
}
@Override
protected void onPostExecute(Place[] places) {
mplace = places;
for (int i = 0; i < places.length; i++) {
Place place = places[i];
double latitude = Double.parseDouble(place.mLat);
double longitude = Double.parseDouble(place.mLang);
LatLng latlng = new LatLng(latitude, longitude);
Marker ATM_MARKER = drawATMMarker(latlng);
mHMReference.put(ATM_MARKER.getId(), place);
}
}
}
这是downloadurl方法的代码。我不知道为什么它不起作用。
private String downloadUrl(String strUrl) throws IOException {
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try {
URL url = new URL(strUrl);
// Creating an http connection to communicate with url
urlConnection = (HttpURLConnection) url.openConnection();
// Connecting to url
urlConnection.connect();
// Reading data from url
iStream = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
iStream));
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
}
data = sb.toString();
br.close();
iStream.close();
urlConnection.disconnect();
} catch (Exception e) {
Log.d("Exception while downloading url", e.toString());
}
return data;
}
我真的崩溃了。
感谢支持人员提前发现错误。
答案 0 :(得分:1)
强文本正如logcat所提到的那样,问题在于onPostExecute方法。执行以下操作时会导致此问题:
double latitude = Double.parseDouble(place.mLat);
double longitude = Double.parseDouble(place.mLang);
看起来 place.mLat 或 place.mLang 返回的值是“”,如您在logcat中看到的那样。您可能必须检查返回的值。