如何实施Google Places API

时间:2012-04-25 02:30:57

标签: android api google-maps

晚安,

我一直在尝试实施一个简单的Android(tm)应用程序,该应用程序利用Google Places(tm)API来确定本地兴趣点(例如餐馆和酒店),但是我确定了如何确定真正开始。

我已经使用的资源如下:

- The Google Places(tm) documentation

- An Android(tm) development blog hosted by Brain Buikema

- 关于异步任务的Android(tm)开发人员文档

- 类似情况下个人的各种其他stackoverflow帖子

我只是希望得到一些指导,这样我的情况下的任何人都可以找到这篇文章,然后转发给一些非常有见地的资源。

此外,我觉得使用谷歌搜索查找资源效率有点低,是否还有程序员经常使用的其他数据库我不知道?任何推荐的文献?

TL; DR ...

- 我正在寻找使用Places API的一些权威指南,在Android(tm)平台上使用JSON对象和网络。

- 我希望被重定向到其他人过去发现的一些有用的资源。

- 我在下面包含了我的Main.java文件,只是为了提供上下文 - 我不是在寻找答案:)


实现Places API功能的Main.java类的代码:

        Button food = (Button) findViewById(R.id.button14);

        food.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            type = "restaurant";

            //Constructs the urlString
            if(useCurr)
                urlString = stringConstructor(myKey, lat, lon, radius, sensor, type);
            else
            {
                //Here, you must update the lat and lon values according to the location input by the user
                urlString = stringConstructor(myKey, lat, lon, radius, sensor, type);
            }



            //DO HTTPS REQUEST HERE
            urlString = "https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AIzaSyAp24M3GU9V3kWrrezye8CyUrhtpToUhrs";

            Results res = new Results();

            JSONArray json = res.doInBackground(urlString);

            System.out.println(json);

        }
    });

处理异步任务的Result类的代码:

private class Results extends AsyncTask<String, Integer, JSONArray>
{
    protected JSONArray doInBackground(String...params)
    {
        JSONArray output = null;

        try
        {
            try
            {
                url = new URL(params[0]);   
            }
            catch(MalformedURLException e)
            {
                System.out.println("URL formed incorrectly! (" + e + ")");
            }

            output = (JSONArray) url.getContent();
        }
        catch(Exception e)
        {
            System.out.println("Exception: " + e);
        }

        return output;
    }
}    

每当我点击模拟器中的“食物”按钮(如上所述)时,目前都会收到android.os.NetworkOnMainThreatException。

非常欢迎任何建议,我正试图在Android平台上建立一个非常坚实的基础。

1 个答案:

答案 0 :(得分:1)

您没有以正确的方式使用AsyncTask。 android doc清楚地说不要手动调用AsyncTask方法。你通过创建doInBackground对象来调用AsyncTask这样改变你的代码:

 btnclicl.setOnClickListener(new View.OnClickListener() {  
                @Override  
                public void onClick(View v) {  
                    Results  dTask = new Results();  
                    dTask.execute(urlString);  
                }  
            });  

    class Results  extends AsyncTask<Integer, Integer, String>{  

            @Override  
        protected void onPostExecute(JSONObject json) {  
            Log.v("json", json);
            super.onPostExecute(json); 
        }  
        @Override  
        protected JSONObject doInBackground(String... params) { 
            JSONObject strtemp=null;            
          HttpClient httpclient = new DefaultHttpClient();
    // Prepare a request object
    HttpGet httpget = new HttpGet(urlString); 
    // Execute the request
    HttpResponse response;
    JSONObject json = new JSONObject();
    try {
        response = httpclient.execute(httpget);

        HttpEntity entity = response.getEntity();

        if (entity != null) {

            // A Simple JSON Response Read
            InputStream instream = entity.getContent();
            String result= convertStreamToString(instream);

            json=new JSONObject(result);

            instream.close();
        }
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return json;
        }  
}