AsyncTask中的值传递在android

时间:2016-03-22 07:23:13

标签: android

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;
  }
}

我以这种方式激发AsyncTask:

  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时,其URL将变为:

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

所以我可以得到回应请告诉我我做错了什么。

1 个答案:

答案 0 :(得分:0)

执行与此相同的任务:

响应=

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