-1

晚上好,

我一直在尝试实现一个简单的 Android(tm) 应用程序,该应用程序利用 Google Places(tm) API 来确定当地的兴趣点(例如餐馆和酒店),但是我在确定如何实际获取时遇到了很多麻烦开始了。

我已经使用的资源如下:

- Google Places(tm) 文档

-由Brain Buikema主持的Android(tm)开发博客

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

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

我只是希望得到一些指导,以便我这种情况的任何人都可以简单地找到这篇文章,然后可能会被转发到一些非常有见地的资源。

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

TL;博士...

-我正在寻找一些关于使用 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 平台上建立一个非常坚实的基础。

4

1 回答 1

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;
        }  
}  
于 2012-04-25T02:41:20.850 回答