0

我有这个代码:

jsonObject1=getLocationInfo(direction);

它旨在返回一个 jsonObject,稍后将对其进行解析,我将获得纬度和经度。

这是方法:

public JSONObject getLocationInfo(final String address) {

            Thread thread=new Thread(){

                public void run(){
                    String adressString=address.replaceAll("\\s+",",");
                    StringBuilder stringBuilder = new StringBuilder();

                    try {



                    HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + adressString + "&sensor=false");
                    HttpClient client = new DefaultHttpClient();
                    HttpResponse response;
                    stringBuilder = new StringBuilder();


                        response = client.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        InputStream stream = entity.getContent();
                        int b;
                        while ((b = stream.read()) != -1) {
                            stringBuilder.append((char) b);
                        }

                    } catch (ClientProtocolException e) {
                    } catch (IOException e) {
                    }

                    ;
                    try {
                        jsonObject = new JSONObject(stringBuilder.toString());
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }



                }
            };
            thread.start();

            return jsonObject;
        }

问题是......由于该方法涉及一个 HttpGet,它必须在另一个线程中。但是,就在 thread.start() 方法之后,调用了 return jsonObject 行,所以返回的对象将为空......我怎么能在返回任何东西之前等待线程结束?

谢谢你。

4

2 回答 2

0

使用AsyncTask,所有网络工作都在 中完成,doInBackground完成后调用该方法onPostExecute,以便您知道 httpget 何时完成并在那里做您需要做的事情

于 2013-09-24T18:13:58.213 回答
0

有几种方法可以做到这一点。但是,如果您只想使用上述线程,请使用处理程序并通过处理程序发送数据。如果您想查看一些代码,请告诉我。

于 2013-09-24T18:23:29.347 回答