11

현재 AutocompleteTextView가있는 회사를 검색 할 수있는 기능을 구축 중입니다.Android에 자동 완성 인토네이션 빌더가있는 장소의 영업 시간을 얻는 방법은 무엇입니까?

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PLACE_AUTOCOMPLETE_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      Place place = PlaceAutocomplete.getPlace(this, data); 
      Log.i(TAG, "Place: " + place.getName()); 
     } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) { 
      Status status = PlaceAutocomplete.getStatus(this, data); 
      Log.i(TAG, status.getStatusMessage()); 
     } else if (resultCode == RESULT_CANCELED) { 
      // The user canceled the operation. 
     } 
    } 
} 

하지만이 '장소'의 개방 시간을 찾을 수 없습니다 :이 같은 장소를받을

try { 
     AutocompleteFilter typeFilter = new AutocompleteFilter.Builder() 
       .setTypeFilter(AutocompleteFilter.TYPE_FILTER_ESTABLISHMENT) 
       .setCountry("NL") 
       .build(); 
     Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_OVERLAY) 
       .setFilter(typeFilter) 
       .build(activity); 
     activity.startActivityForResult(intent, placeAutocompleteRequestCode); 
    } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) { 
     Log.e(TAG, "Something went wrong getting the places fragment." + e.getMessage()); 
    } 

:이 같은 오버레이 모드와 PlaceAutocomplete IntentBuilder를 사용하여이를 달성하기 위해 목적. 어떻게 검색 할 수 있습니까? API를 사용하는 다른 사용자 만 찾을 수 있지만이 자동 완성 부분을 선호합니다.

API 호출로 나중에 장소 ID별로 장소 세부 정보를 얻으려고했지만 서버 키에만 허용 된 것처럼 보입니다. Android에서 릴리스 키를 사용하는 사람이있는 경우 지금은 멋진 핫픽스가 될 것입니다. 그러나 여전히 성가신 느낌.

+2

[this] (https://stackoverflow.com/questions/36004222/get-opening-hours-of-place-android) 또는 [this] (https://stackoverflow.com/questions/42676182)를 시도해 보셨습니까?/how-to-get-opening-hours-the-google-places-api-for-android)? –

+0

예, 시도했지만 작동하지 않습니다. 장소 세부 정보를 가져 오기위한 API 호출에는 IP 필터가있는 API 키가 필요합니다. 이는 클라이언트에서 작동하지 않으며 서버를위한 것입니다. – jobbert

답변

0

아래에이 코드를 사용하십시오 :

private class ParserTask extends AsyncTask<String, Integer, HashMap<String,String>>{ 

     JSONObject jObject; 
     @Override 
     protected HashMap<String,String> doInBackground(String... jsonData) { 

      HashMap<String, String> hPlaceDetails = null; 
      PlaceDetailsJSONParser placeDetailsJsonParser = new PlaceDetailsJSONParser(); 

      try{ 
       // this object give JSON 
       jObject = new JSONObject(jsonData[0]); 

       // this object give Result 
       JSONObject jresult = new JSONObject(jObject[1]);    

       // this object give opening_hours 
       JSONObject jopening_hours = new JSONObject(jresult[2]); 

       // this object give periods 
       JSONObject jperiods = new JSONObject(jopening_hours[2]); 



      }catch(Exception e){ 
       Log.d("Exception",e.toString()); 
      } 
      return jperiods; 
     } 

     // Executed after the complete execution of doInBackground() method 
     @Override 
     protected void onPostExecute(JsonObject periods){ 
       HashMap<String,String> periods; 

       // put your condition 
       for(..) 
       { 
       JsonObject day = new JSONObject(periods[i]); 
        periods.put("key",day.get("day")); 

       } 
       } 
    } 
+0

이 asynctask의 입력은 json 문자열입니다. json 문자열은 어디에서 가져 옵니까? API 호출을 참조한다고 가정합니다. 하지만 Android 클라이언트로 영업 시간을 가질 권한이 없습니다. 실제로이 작업이 있습니까? 아니면 그냥이 답변의 사본 붙여 넣기입니다 : https://stackoverflow.com/a/42731327/2917564. 나는 당신이 볼 수있는 것처럼 실제로 편집했습니다 : P. – jobbert

+0

제발 내 의견 @chandrakant sharma – jobbert

0

probalbly 쿼리가 잘못되었습니다. 매개 변수는 앰퍼샌드로 구분해야합니다.

변경? key = MYKEYHERE? reference = to? key = MYKEYHERE & reference =. 나는 내 열쇠로 그것을 테스트하고 "Coffe company"에 대한 응답을 받았다.

+0

또한 내가 찾던 대답 아니지만 definetely 쿼리 매개 변수를 살펴 보겠습니다. – jobbert