我正在开发小型应用程序来查找最近的自动取款机。
在这我找到了我的位置,现在我正在请求访问谷歌地方。
当我启动我的应用程序时,它最初会显示我的位置,但几秒钟后它会自动崩溃。
我无法解决日志猫。
它显示了一些错误,但如何追踪它。
这是我的日志。
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);
}
}
这是解析器任务的代码。
私有类 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;
}
我真的崩溃了。
感谢支持提前发现bug。