无法在android中找到Near Most Atm

时间:2013-09-24 11:56:30

标签: android android-asynctask

我正在开发小型应用程序以找到最近的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;
}

我真的崩溃了。

感谢支持人员提前发现错误。

1 个答案:

答案 0 :(得分:1)

强文本正如logcat所提到的那样,问题在于onPostExecute方法。执行以下操作时会导致此问题:

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

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