2013-03-03 76 views
1

我在我的應用程序中使用google地方api來顯示附近的食物位置。Android上的Google Places API:沒有路由到主機

我用下面的代碼:

public class Background extends AsyncTask<String, Integer, String> { 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     pfr = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     lctn = "location=" + latitude + "," + longitude; 
     key = "&key=my key"; 
     type = "&types=" + pfr.getString("type", "food"); 
     radius = "&radius=" + pfr.getString("radius", "500"); 
     sensor = "&sensor=false"; 
     StringBuilder requesturl = new StringBuilder(googlegives); 
     requesturl.append(lctn); 
     requesturl.append(radius); 
     requesturl.append(type); 
     requesturl.append(key); 
     requesturl.append(sensor); 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet req = new HttpGet(requesturl.toString()); 
     Log.d("create", "0"); 
     try { 
      HttpResponse res = client.execute(req); 
      HttpEntity jsonentity = res.getEntity(); 
      String data = EntityUtils.toString(jsonentity); 
      JSONObject jsonobj = new JSONObject(data); 
      JSONArray resarray = jsonobj.getJSONArray("results"); 
      if (resarray.length() == 0) { 
       Toast.makeText(getApplicationContext(), "nothing found", 
        Toast.LENGTH_LONG).show(); 
      } else { 
       int len = resarray.length(); 
       for (int j = 0; j < len; j++) { 
        lon = resarray.getJSONObject(j).getJSONObject("geometry") 
          .getJSONObject("location").getDouble("lng"); 
        lat = resarray.getJSONObject(j).getJSONObject("geometry") 
          .getJSONObject("location").getDouble("lat"); 
        LatLng latLng = new LatLng(lat, lon); 
        googleMap.addMarker(new MarkerOptions() 
          .position(latLng) 
          .title(
           resarray.getJSONObject(j).getJSONObject("name") 
             .toString()) 
          .snippet(
           resarray.getJSONObject(j) 
             .getJSONObject("formatted_address") 
             .toString())); 
       } 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

獲得緯度和經度作爲全局變量用於獲取用戶的當前位置,在我的手機下運行此應用程序出現在日誌貓

03-03 16:52:37.859: W/System.err(4780): java.net.SocketException: No route to host 
03-03 16:52:37.906: W/System.err(4780):  at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 
03-03 16:52:37.906: W/System.err(4780):  at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357) 
03-03 16:52:37.906: W/System.err(4780):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 
03-03 16:52:37.914: W/System.err(4780):  at java.net.Socket.connect(Socket.java:1002) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
03-03 16:52:37.914: W/System.err(4780):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
03-03 16:52:37.921: W/System.err(4780):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
03-03 16:52:37.921: W/System.err(4780):  at com.abhishekbietcs.locomap.Mapme$Background.doInBackground(Mapme.java:258) 
03-03 16:52:37.921: W/System.err(4780):  at com.abhishekbietcs.locomap.Mapme$Background.doInBackground(Mapme.java:1) 
03-03 16:52:37.921: W/System.err(4780):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
03-03 16:52:37.921: W/System.err(4780):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
03-03 16:52:37.921: W/System.err(4780):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
03-03 16:52:37.921: W/System.err(4780):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
03-03 16:52:37.921: W/System.err(4780):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
03-03 16:52:37.921: W/System.err(4780):  at java.lang.Thread.run(Thread.java:1019) 

爲什麼拋出這個異常?我怎樣才能擺脫它?

+0

檢查'requesturl.toString()'是否產生一個有效的URL字符串。 – 2013-03-03 12:02:25

+0

否**路由**不*路由器*:P – m0skit0 2013-03-03 12:17:01

+0

http://stackoverflow.com/questions/14566698/no-route-to-host – Doomsknight 2013-03-03 12:18:32

回答

1

java.net.SocketException:沒有路由到主機。

當沒有路由連接到主機時會發生此異常。

我在這裏發現你的問題。

key =「& key = my key」;

String APIKEY="AIzaSyDcLMS0IKQL3N76rO-aD2thfO46r96OCQI"; 
key = "&key=" + APIKEY; 

更換這一點,你取得了錯誤的鏈接。

您的鏈接:

https://maps.googleapis.com/maps/api/place/nearbysearch/output?jsonlocation=25.4509294,78.630043&radius=15000&types=food&key=key&sensor=false

鏈接必須是這樣的:

String url = https://maps.googleapis.com/maps/api/place/search/json?location=25.4509294,78.630043&radius=15000&types=food&key=AIzaSyDcLMS0IKQL3N76rO-aD2thfO46r96OCQI&sensor=false 

要獲得JSON,你可以使用我的代碼。

String data = getUrlContents(url); //Calling method 

Method的定義。

private String getUrlContents(String Url) 
{ 
    StringBuilder content = new StringBuilder(); 
    try { 
     URL url = new URL(Url); 
     URLConnection urlConnection = url.openConnection(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8); 
     String line; 
     while ((line = bufferedReader.readLine()) != null) 
     { 
      content.append(line + "\n"); 
     } 
     bufferedReader.close(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return content.toString(); 
} 
+0

googlegives字符串是「https://maps.googleapis.com/maps/api/place/nearbysearch/output?json「,並使用字符串生成器附加它,爲了獲取json對象,我可以弄清楚在哪裏改變? – 2013-03-03 12:03:36

+0

@ lukas knuth,是的,它返回一個JSON,我在瀏覽器中檢查 – 2013-03-03 12:07:00

+0

@個人requesturl.toString();給出這個值。 – 2013-03-03 12:07:56

相關問題