【问题标题】:Android Places API parse all JSON categoriesAndroid Places API 解析所有 JSON 类别
【发布时间】:2014-02-17 05:15:10
【问题描述】:

我已经有以下类 GetPlaces,它将采用在我的主要活动 onCreate() 中调用的 Google Places API URL new GetPlaces().execute("https://maps.googleapis.com/maps/api/place/search/json?types=cafe&rankby=distance&location=33.897835,-117.955759&sensor=false&key=MyKey"); 并解析输出。

private class GetPlaces extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... urls) {

        StringBuilder placesBuilder = new StringBuilder();

        //process search parameter string(s)
        for (String placeSearchURL : urls) {
            //execute search
            HttpClient placesClient = new DefaultHttpClient();

            try {
                //try to fetch the data
                HttpGet placesGet = new HttpGet(placeSearchURL);
                HttpResponse placesResponse = placesClient.execute(placesGet);
                StatusLine placeSearchStatus = placesResponse.getStatusLine();

                if (placeSearchStatus.getStatusCode() == 200) {
                    //we have an OK response
                    HttpEntity placesEntity = placesResponse.getEntity();
                    InputStream placesContent = placesEntity.getContent();
                    InputStreamReader placesInput = new InputStreamReader(placesContent);
                    BufferedReader placesReader = new BufferedReader(placesInput);
                    String lineIn;
                    while ((lineIn = placesReader.readLine()) != null) {
                        placesBuilder.append(lineIn);
                    }
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }


        return placesBuilder.toString();
    }

    protected void onPostExecute(String data) {
        // TODO: check this.exception 
        // TODO: do something with the feed
        /*
        if(placeMarkers!=null){
            for(int pm=0; pm<placeMarkers.length; pm++){
                if(placeMarkers[pm]!=null)
                    placeMarkers[pm].remove();
            }
        }
        */
        super.onPostExecute(data);
        // Dismiss the progress dialog

        if(data !=null)
        {
            JSONObject jsonObj;
            try {
                jsonObj = new JSONObject(data);
                JSONArray results = jsonObj.getJSONArray("results");

                for (int i = 0; i < results.length(); i++) {
                      JSONObject result = results.getJSONObject(i);

                      String name = result.getString("name");
                      /*
                      String icon = result.getString("icon");

                      String address = result.getString("vicinity");
                      String rating = result.getString("rating");
                      String price = result.getString("price_level");
                      String webiste = result.getString("website");
                      //String review = result.getString("reviews");
                      */
                      Log.d("tag", "name: " + name);
                      if (result.getJSONArray("reviews") != null){
                          JSONArray reviewsArray = result.getJSONArray("reviews");
                          JSONObject reviews = reviewsArray.getJSONObject(0);
                          if (reviews != null){
                              String review = reviews.getString("text");  
                              Log.d("tag", "review: " + review);
                          }
                      }




                    }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }    
        }
        //System.out.println(dat);
    }
} 

我对这段代码有几个问题:

  1. 我收到 org.json.JSONException: No value for reviews 错误,我不确定检查该错误的最佳方法是什么。
  2. 如何获取该地点的图像?我不是指图标,但我怎样才能获得photos[] 数组中的照片?
  3. 如何在 Main Activity 的 onCreate 方法或辅助函数中检索这些数据?

【问题讨论】:

    标签: android json google-places-api


    【解决方案1】:

    试试这个:- 此网址将帮助您查找/搜索 NearByPlaces.....

      StringBuilder sb = new StringBuilder(
                                                "https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
                                        sb.append("location=" + mLatitude + ","
                                                + mLongitude);
                                        sb.append("&radius=5000");
                                        sb.append("&types=" + type);
                                        sb.append("&sensor=true");
                                        sb.append("&key=--Your--Key--");
            PlacesTask placesTask = new PlacesTask();
        placesTask.execute(sb.toString());
    

    【讨论】:

    【解决方案2】:

    尝试如下传递 url。您还必须在 url 中添加半径以查找地点(在您的示例咖啡馆中)。& 获得地点后,您可以使用标记选项来标记地点。因为您可以使用您的图像作为标记

     StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
                                sb.append("location="+mLatitude+","+mLongitude);
                                sb.append("&radius=2000");
                                sb.append("&types="+type);
                                sb.append("&sensor=true");
    
        sb.append("&key=Your+Key");
    
    GetPlaces placesTask = new GetPlaces(); 
    placesTask.execute(sb.toString());
    

    【讨论】:

    • 我知道如何创建 URL 并调用它。我已经用 `new GetPlaces().execute("maps.googleapis.com/maps/api/place/search/…) 这样做了,但这并不能回答我的 3 个问题。
    • 我处理了第三个问题。如果您能回答前两个问题,将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多