2013-09-24 52 views
-1

我正在開發小型應用程序以查找最近的atm。在Android上找不到Near Most Atm

在這我發現我的位置現在我正在請求訪問谷歌的地方。

當我開始我的應用程序它最初顯示我我的位置,但幾秒鐘後它會自動崩潰。

我無法解決登錄貓。

它顯示了一些錯誤,但如何找出它。

這裏是我的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

strong textAs logcat提到問題是onPostExecute方法。問題是,當你正在做的原因主要包括:

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

看起來像由兩種place.mLatplace.mLang返回的值是一個「」如您在logcat中看到。您可能需要檢查返回的值。

+0

現在我修改了我的代碼,並把這個得到的經度和緯度以下的東西,所以現在吐司顯示它只給緯度不經度以及應用程序現在不崩潰,但它不顯示額外的標記,你可以告訴我什麼可能是問題?爲什麼它只返回緯度不是經度? –

+0

嘿兄弟感謝它顯示了所有的緯度,但爲什麼經度仍然是0.0?正如我告訴你,它顯示了包含緯度但經度爲0.0的吐司,你能告訴我爲什麼會發生? –