-1

我正在开发小型应用程序来查找最近的自动取款机。

在这我找到了我的位置,现在我正在请求访问谷歌地方。

当我启动我的应用程序时,它最初会显示我的位置,但几秒钟后它会自动崩溃。

我无法解决日志猫。

它显示了一些错误,但如何追踪它。

这是我的日志。

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。

4

1 回答 1

1

strong textAs logcat 提到的问题在于 onPostExecute 方法。当您执行以下操作时会导致此问题:

 double latitude = Double.parseDouble(place.mLat);
 double longitude = Double.parseDouble(place.mLang);

看起来place.mLatplace.mLang返回的值是一个“”,正如您在 logcat 中看到的那样。您可能必须检查返回的值。

于 2013-09-24T11:59:36.990 回答