2012-04-25 4 views
-1

Добрый вечер,Как реализовать API Google Адресов

Я пытался реализовать простое приложение для Android (TM), который использует Google Places (TM) API для определения локальных точек интереса (например, ресторанов и гостиниц), однако у меня было довольно много проблем с определением того, как начать работу.

Ресурсы я уже используемые в следующем:

- The Google Places(tm) documentation

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

-The Android (тм) разработчик документации на асинхронных задач

-различные другие StackOverflow проводки от физические лица в аналогичных обстоятельствах

Я просто хмель для того, чтобы кто-нибудь в моей ситуации мог просто найти этот пост и, возможно, затем перенаправлен на некоторые чрезвычайно проницательные ресурсы.

Кроме того, я считаю, что использование поисков Google для поиска ресурсов несколько неэффективно, существуют ли другие базы данных, которые часто используют программисты, о которых я не знаю? Любая рекомендуемая литература?

TL; DR ...

-Я искал некоторые окончательные руководства для использования API Адресов, работа с объектами JSON и сетей на (TM) платформы Android.

-Я надеялся, что вас переадресуют в некоторые полезные источники, которые другие нашли в прошлом.

-I включил мой файл Main.java ниже просто обеспечить контекст - я не ищу ответы :)


кода для класса Main.java, который реализует функциональные возможности Места API:

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

     } 
    }); 

Код для класса Результат, который обрабатывает Asynchronous задачу:

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.

+0

где вы делаете HttpPost для gtting JSON от сервера? –

+0

FYI: NetworkOnMainThreatException возникает, когда вы пытаетесь выполнить сетевую задачу в основном потоке: http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception – anticafe

ответ

1

Вы не используете AsyncTask в правильном направлении. андроид документ ясно говорит do't называют AsyncTask методы manually.you призывают 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; 
     } 
} 
+0

Спасибо за быстрый ответ! Я не знаю, как сделать сообщение httppost для объекта json.Я искал ресурс, который мог бы помочь мне в определении того, как работать с данными, представленными через API, поэтому мой пост здесь. Есть ли какой-то конкретный источник, объясняющий, как реализовать эти запросы в Android? – Squagem

+0

см. Этот пример http://www.instropy.com/2010/06/14/reading-a-json-login-response-with-android-sdk/ и использовать runOnUiThread или AsyncTask для создания httppost –

+0

см. Мой ответ на редактирование –

Смежные вопросы