2016-03-22 31 views
-1
public class GecodeFuncation { 

public static String getLatLongByURL(String requestURL) { 
    URL url; 
    String response = ""; 
    try { 
     url = new URL(requestURL); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     conn.setRequestProperty("Content-Type", 
       "application/x-www-form-urlencoded"); 
     conn.setDoOutput(true); 
     int responseCode = conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line = br.readLine()) != null) { 
       response += line; 
      } 
     } else { 
      response = ""; 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return response; 
    } 
} 

我这样excuting的AsyncTask对象甲:值传递是在Android的

new GeocodeImplementation().execute("D-109 3rd floor ShakarPur Laxmi Nagar New Delhi 110092".replace(" ","%20")); 
下面

是我AsyncTask

class GeocodeImplementation extends AsyncTask<String, Void, String[]> { 
     ProgressDialog dialog = new ProgressDialog(DataEntry.this); 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      dialog.setMessage("Please wait..."); 
      dialog.setCanceledOnTouchOutside(false); 
      dialog.show(); 
     } 

     @Override 
     protected String[] doInBackground(String... params) { 
      String response; 
      try { 
       response = GecodeFuncation.getLatLongByURL("http://maps.google.com/maps/api/geocode/json?address="+params+"&sensor=false"); 
       Log.d("response",""+response); 
       return new String[]{response}; 
      } catch (Exception e) { 
       return new String[]{"error"}; 
      } 
     } 

     @Override 
     protected void onPostExecute(String... result) { 
      try { 
       JSONObject jsonObject = new JSONObject(result[0]); 

       double lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0) 
         .getJSONObject("geometry").getJSONObject("location") 
         .getDouble("lng"); 

       double lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0) 
         .getJSONObject("geometry").getJSONObject("location") 
         .getDouble("lat"); 

       Log.d("latitude", "" + lat); 
       Log.d("longitude", "" + lng); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      if (dialog.isShowing()) { 
       dialog.dismiss(); 
      } 
     } 
    } 

当我通过地址的AsyncTask然后其网址变为:

http://maps.google.com/maps/api/geocode/json?address=[Ljava.lang.String;@41fff330&sensor=false

所以我无法得到响应,而应该是

http://maps.google.com/maps/api/geocode/json?address=D-109%203rd%20floor%20ShakarPur%20Laxmi%20Nagar%20New%20Delhi%20110092&sensor=false

这样我就可以得到响应,请告诉我,我做错了。

+0

params为一个字符串...,什么意味着是一个可变参数(字符串数组),而不是字符串,所以你必须通过使用params [0] –

+0

如何访问你的url,存储在第一个位置如何执行taske –

+0

这样做: response = GecodeFuncation.getLatLongByURL(“your url”+ params [0] +“&sensor = false” ); 让一切都保持不变。 –

回答

0

执行任务一样是这样的:

响应=

GecodeFuncation.getLatLongByURL("http://maps.google.com/maps/api/geocode/json?address="+params[0]+"&sensor=false");