Places API Web Service를 이용하여 현재 위치 주변의 음식점 정보를 안드로이드의 구글맵에 표시하는 내용을 다룹니다.



Google Maps Android API를 사용하는 방법과  FusedLocationProviderClient 를 이용하여 현재 위치를 구글맵에 표시하는 내용을 다음 두 포스팅에서 다루었습니다.

중복된 내용은 빠져있기 때문에 본 포스팅에 있는 내용을 진행하기 전에 미리 검토해보세요..

 

Google Maps Android API 사용 방법 및 예제

http://webnautes.tistory.com/647 


Android Google Map에 현재 위치 표시하기( FusedLocationProviderClient 사용)

https://webnautes.tistory.com/1249 




 2016.12. 4

 2017.11.27  주변 장소의 주소가 한글로 나오도록 수정

 2018. 6. 13 

 2019. 7. 19  FusedLocationProviderClient 사용하도록 수정

 2019. 8. 15  androidx,SupportMapFragment 사용하도록 수정





1. Places API Web Service 키 얻기


2. Google Map에 현재 위치 주변의 음식점 표시하기


3. 실행 결과


4. 구현시 참고





Places SDK for Android v.3.0.0 BETA를 테스트해보았습니다. 

안드로이드에서도 현재 위치를 기준으로 타입별로 장소를 검색할 수 있게 됩니다.

얼른 정식 버전이 나왔으면 좋겠군요.


Places SDK for Android v.3.0.0 BETA 사용해보기

https://webnautes.tistory.com/1370



1. Places API Web Service 키 얻기

현재 위치 주변에 있는 장소를 종류별로 검색하는 기능을 Google Places API for Android에서는 아직 제공하지 않기 때문에 Places API Web Service를 사용합니다.


1. Google Developers Console 사이트(https://console.developers.google.com/flows/enableapi?apiid=places_backend&reusekey=true&hl=ko )에 접속합니다. 




2. 콤보박스를 클릭하여 Google Maps Android API를 위해 생성했던 프로젝트를 선택하고 계속을 클릭합니다.  





3. 어떤 사용자 인증 정보가 필요한가요?를 클릭합니다.





4. 생성된  API키를 복사해두고 완료를 클릭합니다. 





5. 이제 프로젝트에 Places API Web Service를 위한 API 키와 Google Maps Android API를 위한 API키  두 개가 존재합니다. 





2. Google Map에 현재 위치 주변의 음식점 표시하기

Places API Web Service에서 제공하는 REST API를 사용하여 현재 위치 주변의 음식점에 대한 정보를 요청하여 획득된 JSON을 파싱하는 작업을 해주면  되지만 여기에서는 간단하게 구현이 가능한 Android-Google-Places-API 라이브러리(https://github.com/nomanr/Android-Google-Places-API)를 사용했습니다.



다음 포스팅에 있는 코드를 기반으로 수정하는 방법을 설명합니다.


Android Google Map에 현재 위치 표시하기( FusedLocationProviderClient 사용)

https://webnautes.tistory.com/1249 



레이아웃 파일( activity_main.xml )에 버튼을 추가하고 android:layout_weight 속성으로 화면에 보이는 지도와 버튼의 높이를 조정합니다. 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layout_main"
    android:orientation="vertical"
   tools:context=".MainActivity" >

    <fragment
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.8"
        android:id="@+id/map"
        tools:context=".MapsActivity"
        android:name="com.google.android.gms.maps.SupportMapFragment" />

    <Button
        android:text="장소검색"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.2"
        android:id="@+id/button"/>

</LinearLayout>



app 모듈을 위한 build.gradle 파일에서  minSdkVersion15 이상으로 사용해야 합니다. 


android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.tistory.webnautes.googlemaptest"
        minSdkVersion 21
        targetSdkVersion 29
       versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }



Android-Google-Places-API 라이브러리를 추가해줍니다.  글 작성시점에서 최신 버전은 1.1.3입니다.


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.android.gms:play-services-location:17.0.0'
    implementation 'com.google.android.material:material:1.1.0-alpha09'
    implementation 'noman.placesapi:placesAPI:1.1.3'
   testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}



변경된 사항을 반영해주기 위해 상단 우측에 보이는  Sync Now를 클릭합니다.




다음과 같은 에러가 발생합니다.


Manifest merger failed : Attribute application@allowBackup value=(true) from AndroidManifest.xml:7:9-35
is also present at [noman.placesapi:placesAPI:1.1.3] AndroidManifest.xml:12:9-36 value=(false).
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:6:5-27:19 to override.



메니패스트 파일(AndroidManifest.xml)에서 <application> 태그의 allowBackup 속성을 false로 수정하면 해결됩니다.


    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">



관련 내용은 다음 블로그 글을 확인해보세요. 


안드로이드 보안 취약 점 allowBackup - 비밀 정보 쉽게 빼내어 가는 법

 http://comostudio.tistory.com/85 




MainActivity에서 PlacesListener 인터페이스를 구현해줘야 합니다.

PlacesListener를 추가해줍니다.


public class MainActivity extends AppCompatActivity
        implements
        OnMapReadyCallback,
        ActivityCompat.OnRequestPermissionsResultCallback,
        PlacesListener{




다음 세 줄을 추가해줍니다.


import noman.googleplaces.Place;
import noman.googleplaces.PlacesException;
import noman.googleplaces.PlacesListener;




추가한 인터페이스에서 요구하는 다음 4개의 메소드를 추가해줍니다.

@Override
public void onPlacesFailure(PlacesException e) {

}

@Override
public void onPlacesStart() {

}

@Override
public void onPlacesSuccess(List<Place> places) {

}

@Override
public void onPlacesFinished() {

}



필요한 변수를 추가해줍니다.


List<Marker> previous_marker = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);





onPlacesSuccess 메소드의 파라미터 타입에 final을 추가해주고 다음 코드를 입력합니다.


@Override
public void onPlacesSuccess(final List<Place> places) {

      runOnUiThread(new Runnable() {
            @Override
            public void run() {
                for (noman.googleplaces.Place place : places) {

                    LatLng latLng
                            = new LatLng(place.getLatitude()
                            , place.getLongitude());

                    String markerSnippet = getCurrentAddress(latLng);

                    MarkerOptions markerOptions = new MarkerOptions();
                    markerOptions.position(latLng);
                    markerOptions.title(place.getName());
                    markerOptions.snippet(markerSnippet);
                    Marker item = mMap.addMarker(markerOptions);
                    previous_marker.add(item);

                }

                //중복 마커 제거
                HashSet<Marker> hashSet = new HashSet<Marker>();
                hashSet.addAll(previous_marker);
                previous_marker.clear();
                previous_marker.addAll(hashSet);

            }
        });

}



showPlaceInformation() 메소드를 추가해줍니다. 

 "Places API Web Service 키" 부분에 따로 복사해둔 키를 입력하셔야 합니다.


public void showPlaceInformation(LatLng location)
{
mMap.clear();//지도 클리어

if (previous_marker != null)
previous_marker.clear();//지역정보 마커 클리어

new NRPlaces.Builder()
.listener(MainActivity.this)
.key("Places API Web Service 키")
.latlng(location.latitude, location.longitude)//현재 위치
.radius(500) //500 미터 내에서 검색
.type(PlaceType.RESTAURANT) //음식점
.build()
.execute();
}





onCreate 메소드에  ArrayList 초기화와 버튼 클릭시 showPlaceInformation() 메소드를 호출하는 코드를 추가합니다.



setContentView(R.layout.activity_main);


previous_marker = new ArrayList<Marker>();

Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPlaceInformation(currentPosition);
}
});



3. 실행 결과

실행하면 현재 위치가 지도에 표시됩니다.


주변 영역이 많이 보이도록 지도의 줌을 적당하게 조정한 후,  장소 검색 버튼을 누르면 현재 위치 주변의 음식점 위치들이 지도에 표시됩니다.


결과를 가져오는데 좀 시간이 걸립니다. 





음식점 위치를 표시하는 마커 하나를 선택하면 음식점 이름과 주소가 나타납니다.

장소 검색버튼을 다시 누르면 기존 마커들을 다지우고 새로 음식점 마커들을 표시합니다.




4. 구현시 참고

https://developers.google.com/places/web-service/supported_types?hl=ko 에 있는 Places API Web Service에서 지원되는 장소 유형을  Android-Google-Places-API 라이브러리에서 다음처럼 정의해놓고 있습니다. 

package noman.googleplaces;

/**
* Created by Noman on 8/25/2016.
* https://developers.google.com/places/supported_types
*/
public interface PlaceType {
    public String ACCOUNTING = "accounting";
    public String AIRPORT = "airport";
    public String AMUSEMENT_PARK = "amusement_park";
    public String AQUARIUM = "aquarium";
    public String ART_GALLERY = "art_gallery";
    public String ATM = "atm";
    public String BAKERY = "bakery";
    public String BANK = "bank";
    public String BAR = "bar";
    public String BEAUTY_SALON = "beauty_salon";
    public String BICYCLE_STORE = "bicycle_store";
    public String BOOK_STORE = "book_store";
    public String BOWLING_ALLEY = "bowling_alley";
    public String BUS_STATION = "bus_station";
    public String CAFE = "cafe";
    public String CAMPGROUND = "campground";
    public String CAR_DEALER = "car_dealer";
    public String CAR_RENTAL = "car_rental";
    public String CAR_REPAIR = "car_repair";
    public String CAR_WASH = "car_wash";
    public String CASINO = "casino";
    public String CEMETERY = "cemetery";
    public String CHURCH = "church";
    public String CITY_HALL = "city_hall";
    public String CLOTHING_STORE = "clothing_store";
    public String CONVENIENCE_STORE = "convenience_store";
    public String COURTHOUSE = "courthouse";
    public String DENTIST = "dentist";
    public String DEPARTMENT_STORE = "department_store";
    public String DOCTOR = "doctor";
    public String ELECTRICIAN = "electrician";
    public String ELECTRONICS_STORE = "electronics_store";
    public String EMBASSY = "embassy";
    public String FINANCE = "finance";
    public String FIRE_STATION = "fire_station";
    public String FLORIST = "florist";
    public String FUNERAL_HOME = "funeral_home";
    public String FURNITURE_STORE = "furniture_store";
    public String GAS_STATION = "gas_station";
    public String GYM = "gym";
    public String HAIR_CARE = "hair_care";
    public String HARDWARE_STORE = "hardware_store";
    public String HINDU_TEMPLE = "hindu_temple";
    public String HOME_GOODS_STORE = "home_goods_store";
    public String HOSPITAL = "hospital";
    public String INSURANCE_AGENCY = "insurance_agency";
    public String JEWELRY_STORE = "jewelry_store";
    public String LAUNDRY = "laundry";
    public String LAWYER = "lawyer";
    public String LIBRARY = "library";
    public String LIQUOR_STORE = "liquor_store";
    public String LOCAL_GOVERNMENT_OFFICE = "local_government_office";
    public String LOCKSMITH = "locksmith";
    public String LODGING = "lodging";
    public String MEAL_DELIVERY = "meal_delivery";
    public String MEAL_TAKEAWAY = "meal_takeaway";
    public String MOSQUE = "mosque";
    public String MOVIE_RENTAL = "movie_rental";
    public String MOVIE_THEATER = "movie_theater";
    public String MOVING_COMPANY = "moving_company";
    public String MUSEUM = "museum";
    public String NIGHT_CLUB = "night_club";
    public String PAINTER = "painter";
    public String PARK = "park";
    public String PARKING = "parking";
    public String PET_STORE = "pet_store";
    public String PHARMACY = "pharmacy";
    public String PHYSIOTHERAPIST = "physiotherapist";
    public String PLUMBER = "plumber";
    public String POLICE = "police";
    public String POST_OFFICE = "post_office";
    public String REAL_ESTATE_AGENCY = "real_estate_agency";
    public String RESTAURANT = "restaurant";
    public String ROOFING_CONTRACTOR = "roofing_contractor";
    public String RV_PARK = "rv_park";
    public String SCHOOL = "school";
    public String SHOE_STORE = "shoe_store";
    public String SHOPPING_MALL = "shopping_mall";
    public String SPA = "spa";
    public String STADIUM = "stadium";
    public String STORAGE = "storage";
    public String STORE = "store";
    public String SUBWAY_STATION = "subway_station";
    public String SYNAGOGUE = "synagogue";
    public String TAXI_STAND = "taxi_stand";
    public String TRAIN_STATION = "train_station";
    public String TRANSIT_STATION = "transit_station";
    public String TRAVEL_AGENCY = "travel_agency";
    public String UNIVERSITY = "university";
    public String VETERINARY_CARE = "veterinary_care";
    public String ZOO = "zoo";

}



showPlaceInformation() 메소드에서 PlaceType.RESTAURANT를 필요시 위에 나온 원하는 타입으로 바꾸시면 됩니다. 

public void showPlaceInformation(LatLng location)
{
mGoogleMap.clear();//지도 클리어

if (previous_marker != null)
previous_marker.clear();//지역정보 마커 클리어

new NRPlaces.Builder()
.listener(MainActivity.this)
.key("Places API Web Service 키")
.latlng(location.latitude, location.longitude)//현재 위치
.radius(500) //500 미터 내에서 검색
.type(PlaceType.RESTAURANT) //음식점

                  .language("ko", "KR")
.build()
.execute();
}



.type(PlaceType.RESTAURANT)를 지우면 주변에 있는 모든 타입의 장소가 검색됩니다.




포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


후원계좌 카카오뱅크 3355112417955

  1. 이전 댓글 더보기
  2. 딩딩감자 2019.12.03 04:20

    사이트 너무 유용하게 활용하고 있습니다. 감사합니다.

    장소 검색이 앱을 빌드 했을 때 1번만 되고 그 다음부터는 버튼을 또 눌러도 검색이 안되네요.. 왜그런건가요? ㅠㅠ 안될 때는 현재 위치 마크만 뜨네요

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.03 08:19 신고

      사용한 라이브러리가 주변 장소를 가져오는 시간이 일정하지 않습니다.

      좀 기다려야 주변 정보가 보입니다

  3. 1 2019.12.10 02:33

    @Override
    public void onPlacesStart() {

    }

    @Override
    public void onPlacesSuccess(List<Place> places) {

    }

    onPlacesStart 만 호출 되고
    onPlacesSuccess 호출되지 않네요...

    결과는 현재 제위치만 마커가 찍힙니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.10 08:52 신고

      Rest API를 내부적으로 사용하는 라이브러리 특성상 주변 위치 가져오는데 오래걸립니다.

      로그캣을 보면 URL이 보일겁니다. 복사해서 웹브라우저에 붙여넣기 해보세요.

  4. 1 2019.12.10 12:41

    안녕하세요. 로그캣에 URL이 나오지 않는 것 같습니다.

    2019-12-10 12:34:39.980 4966-5174/? D/WifiScanningService: addSingleScanRequest: ClientInfo[uid=10015,android.os.Messenger@50975f9],Id=431,WorkSource{10385 com.example.yourtime_home}, ScanSettings { packageName:com.google.android.gms band:3 period:0 reportEvents:2 numBssidsPerScan:25 maxScansToCache:0 channels:[ ] }
    2019-12-10 12:34:39.981 4966-5174/? I/WifiScanController: scan requested by com.google.android.gms (it's NLP package. check moving state)
    2019-12-10 12:34:40.102 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.482672 경도:126.9743862
    2019-12-10 12:34:41.115 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827147 경도:126.9744381
    2019-12-10 12:34:41.649 4966-11574/? D/WifiPermissionsUtil: canAccessScanResults: pkgName = com.google.android.gms, uid = 10015
    2019-12-10 12:34:41.710 4966-6485/? D/WifiPermissionsUtil: canAccessScanResults: pkgName = com.google.android.gms, uid = 10015
    2019-12-10 12:34:41.915 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827335 경도:126.9744611
    2019-12-10 12:34:43.157 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827527 경도:126.9744829
    2019-12-10 12:34:44.125 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.482755 경도:126.9744852
    2019-12-10 12:34:45.102 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827524 경도:126.9744818
    2019-12-10 12:34:46.363 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827772 경도:126.9745506
    2019-12-10 12:34:47.117 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827872 경도:126.974579
    2019-12-10 12:34:48.095 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827904 경도:126.9745892
    2019-12-10 12:34:49.128 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827903 경도:126.9745901
    2019-12-10 12:34:50.151 15961-15961/com.example.yourtime_home D/googlemap_example: onLocationResult : 위도:37.4827872 경도:126.9745829
    2019-12-10 12:34:50.249 6306-6621/? D/ContactsProvider_EventLog: contents_sample_state: [CONTACT contacts(539) data(2331) accounts({com.google (2)=155, com.samsung.android.coreapps (10)=93, vnd.sec.contact.phone (1)=385}) accounts deleted({com.samsung.android.coreapps (10)=1}) calls([logtype:100 cnt:2, logtype:200 cnt:215, logtype:300 cnt:285, logtype:500 cnt:2, logtype:1000 cnt:496]) countryIso(KR) userId(0) ]
    contents_sample_state: [ agr({[1 ,10]=71, [1 ,1]=1, [1]=312, [2]=133, [2 ,10]=22}) ]
    contents_sample_state: [ actCnt({android.process.acore(6306)=1}) ]
    contents_sample_state: [PROFILE contacts(1) data(1) accounts({vnd.sec.contact.phone (1)=1}) ]
    contents_sample_state: [SAPROFILE contacts(1) data(6) accounts({vnd.sec.contact.phone (1)=1}) ]
    2019-12-10 12:34:50.644 4966-5174/? D/WifiScanningService: addSingleScanRequest: ClientInfo[uid=10015,android.os.Messenger@50975f9],Id=432,WorkSource{10385 com.example.yourtime_home}, ScanSettings { packageName:com.google.android.gms band:3 period:0 reportEvents:2 numBssidsPerScan:25 maxScansToCache:0 channels:[ ] }
    2019-12-10 12:34:50.646 4966-5174/? I/WifiScanController: scan requested by com.google.android.gms (it's NLP package. check moving state)

  5. 1 2019.12.10 12:44

    원인을 찾았습니다.
    제 앱에서 AsyncTask 하나를 사용하고 있었는데, 그 AsyncTask를 죽이니까 주변 정보가 마커가 찍힙니다.

    좋은 정보 올려주셔서 감사합니다!

  6. 2 2019.12.11 16:20

    혹시 특정 종류의 식당만 띄우는 것도 가능한가요? 파스타를 파는 식당 또는 햄버거집만 이런 식으로요!

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.11 19:33 신고

      식당 이라는 큰부류밖에 없습니다. 다른 곳에서 제공하는 데이터베이스를 사용해야할듯합니다. 한국관광공사에서 제공하는 것도 있습니다.

      http://api.visitkorea.or.kr/main.do

  7. 123 2019.12.12 12:51

    혹시 주소 대신 전화번호를 띄울수는 없나요?

  8. 천사님 2019.12.20 14:21

    안녕하세요! 덕분에 개발에 정말 많은 도움이 되고 있습니다!
    다름이 아니라 현재 위치로 계속 카메라가 움직이는 부분을 고치고 싶은데요 ㅠㅠ
    어떻게 해야될 지 잘 모르겠어서 댓글남겼어요!
    윗 댓글을 읽어봐도 해결이 잘 안되더라구요....감사합니다 :)

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.20 15:35 신고

      아래 코드가 실행되는 것을 필요할때에만 가능하게 하면됩니다.

        //현재 위치에 마커 생성하고 이동
                      setCurrentLocation(location, markerTitle, markerSnippet);

  9. 뱅뱅 2020.01.20 16:53

    주변 병원을 찾는 것으로 개발중인데 액티비티가 아닌 프래그먼트에서 작성중입니다.
    현재위치까지는 띄워놓았는데 주변의 병원을 인식하지를 못하는것인지 지도에서 마커가 뜨지를 않습니다.
    showPlaceInformation 함수에서 mMap.clear() 를 주석처리하고 실행하면 실행은 되지만 현재위치만 뜰 뿐 병원은 보이지 않고 주석제거 후 clear를 돌아가게끔 하면 에러가 발생합니다.
    위의 코드에서 프래그먼트로 바꿀때 코드를 알고싶습니다.

    아래는 에러 메시지입니다. 널포인트 에러값인데 익셉션 처리를 해도 병원이 뜨지는 않습니다.
    아마 액티비티에서 사용해야할 함수를 프래그먼트 내에서 사용해서 그렇다고 추측합니다.
    java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.GoogleMap.clear()' on a null object reference

    감사합니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.01.20 21:22 신고

      깃허브에서 구글맵에서 현재 위치를 보여주는 예제에 대한 프래그먼트 구현을 찾아보세요.

  10. 김진원 2020.01.28 20:09

    현재 위치 나오는건 성공했고 버튼 클릭했을때 주변 레스토랑이 나와야 되는데
    액티비티가 꺼지고 앱이 종료되네요..

    new NRPlaces.Builder()
    .listener(RealFindStoreActivity.this)
    .key("AxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxU")
    .latlng(location.latitude, location.longitude)//현재 위치
    .radius(500) //500 미터 내에서 검색
    .type(PlaceType.RESTAURANT) //음식점
    .language("ko", "KR")
    .build()
    .execute();

    이 후에 에러가 발생합니다 ㅎㅎ

    에러메시지는 이렇게 나오는데
    어떤게 잘못된걸까요?

    E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.test.myapplication, PID: 14014
    java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$4.done(AsyncTask.java:399)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:919)
    Caused by: java.lang.IllegalArgumentException: 'restaurant' is invalid. All types are given in PlaceType class
    at c.a.b.a(:301)
    at c.a.a.c(:47)
    at c.a.a.doInBackground(:13)
    at android.os.AsyncTask$3.call(AsyncTask.java:378)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:919) 

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.01.28 21:16 신고

      포스트에도 나와있지만 restaurant는 PlaceType 클래스에 포함되어 있는데 에러가 나니 이상하군요. 같은 에러가 나는지 다른 타입으로 변경해보세요.

      Caused by: java.lang.IllegalArgumentException: 'restaurant' is invalid. All types are given in PlaceType class

  11. 마마무 2020.02.18 10:44

    안녕하세요~~!!! 글 정말 잘 보았습니다.. 이렇게 상세하게 적어주시다니 정말 감사합니다..ㅜㅜㅜ
    다름아니라 버튼 클릭 시 현재 위치만 보이는데 댓글보니

    [Rest API를 내부적으로 사용하는 라이브러리 특성상 주변 위치 가져오는데 오래걸립니다.]

    이렇게 적어주셨더라구요.

    많이오래걸리나요 . . ? 한시간은 넘은거같은데 버튼을 클릭해도 계속 현재위치만 마커가 찍히네요 ㅠㅠ
    위치는 홍대 GYM 으로 설정했는데..

    D로그에는

    2020-02-18 10:38:14.301 25522-25567/com.diet.location D/NetworkSecurityConfig: No Network Security Config specified, using platform default
    2020-02-18 10:38:14.330 25522-25522/com.diet.location D/googlemap_example: onStart
    2020-02-18 10:38:14.330 25522-25522/com.diet.location D/googlemap_example: onStart : call mFusedLocationClient.requestLocationUpdates
    2020-02-18 10:38:14.343 25522-25605/com.diet.location D/OpenGLRenderer: HWUI GL Pipeline
    2020-02-18 10:38:14.349 25522-25522/com.diet.location D/BezellessGripSuppressionFilter: getdisplaysize, x : 1440 y : 3120
    2020-02-18 10:38:14.353 25522-25522/com.diet.location D/googlemap_example: onMapReady :
    2020-02-18 10:38:14.391 25522-25522/com.diet.location D/LocationManager: init Cipher success.
    2020-02-18 10:38:14.392 25522-25522/com.diet.location D/googlemap_example: startLocationUpdates : call mFusedLocationClient.requestLocationUpdates
    2020-02-18 10:38:14.436 25522-25605/com.diet.location D/OpenGLRenderer: Swap behavior 2
    2020-02-18 10:38:16.163 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557302 경도:127.0624139
    2020-02-18 10:38:26.171 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557336 경도:127.0624034
    2020-02-18 10:38:30.049 25522-25522/com.diet.location D/googlemap_example: onMapClick :
    2020-02-18 10:38:31.063 25522-25522/com.diet.location D/googlemap_example: onMapClick :
    2020-02-18 10:38:37.570 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557359 경도:127.0624057
    2020-02-18 10:38:38.886 25522-25522/com.diet.location D/googlemap_example: onMapClick :
    2020-02-18 10:38:48.875 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557348 경도:127.0624108
    2020-02-18 10:39:00.355 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557356 경도:127.0624062
    2020-02-18 10:39:12.043 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557361 경도:127.0624001
    2020-02-18 10:39:23.829 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557369 경도:127.0624026
    2020-02-18 10:39:35.335 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557362 경도:127.0624097
    2020-02-18 10:39:46.710 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557351 경도:127.0624133
    2020-02-18 10:39:58.179 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.655735 경도:127.0624092
    2020-02-18 10:40:09.699 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557373 경도:127.0624107
    2020-02-18 10:40:21.327 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557404 경도:127.0624031
    2020-02-18 10:40:24.700 25522-25522/com.diet.location D/googlemap_example: onMapClick :
    2020-02-18 10:40:32.789 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.6557382 경도:127.0624009
    2020-02-18 10:40:44.257 25522-25522/com.diet.location D/googlemap_example: onLocationResult : 위도:37.655738 경도:127.0623976


    이런식으로 다 성공적이게 찍힌거 같은데 마커만 안뜨네용 ㅎㅎ ..ㅠㅠㅠㅠ
    혹시몰라 제 핸드폰으로도 해보고있는데 잘 안됩니당 , ,ㅠㅠ

    • 마마무 2020.02.18 11:02

      2020-02-18 10:58:50.348 26246-26408/com.diet.location E/Places: https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=Places API Web Service 키&location=37.6556798,127.0622713&radius=500&type=gym
      2020-02-18 10:58:50.452 26246-26408/com.diet.location E/Places: noman.googleplaces.PlacesException: REQUEST_DENIED
      2020-02-18 10:58:50.453 26246-26246/com.diet.location E/Places: noman.googleplaces.PlacesException: REQUEST_DENIED



      그리고 이런 에러메시지 뜨는데 이건 뭘까요 . .

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.02.18 20:50 신고

      REQUEST_DENIED라고 보이는 것으로 봐서는 인증 오류입니다. 키 생성을 다시 해보세요

  12. 헤헤 2020.02.20 13:56

    형님 포스팅 너무너무 감사드립니다. 형님 덕분에 개인 프로젝트 순항중입니다!!!

  13. 2020.04.07 15:45

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.04.07 17:33 신고

      1. 해당 기능을 제공해주는 데이터베이스를 사용하거나 따로 데이터베이스를 구축해야 할듯합니다.

      2. 해당 정보를 ArrayList에 저장하여 리스트뷰에 보여주면 됩니다.

  14. 2020.04.15 03:14

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.04.15 08:09 신고

      인증 오류입니다. 키를 다시 생성해보세요. 개발이 중단되어 최신버전이 없습니다

  15. teoreoreok 2020.04.22 23:10

    안녕하세요 공부하면서 많이 배우고 있습니다.
    저는 지정된 위치주변의 음식점을 표시했는데 혹시 현재위치가 showplaceinformation() 안에서 지정해놓은 .radius범위 밖으로
    나가게되면 메세지를 띄우게 하는 방법이 있을까요??

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.04.23 05:46 신고

      현재위치와 지정한 특정위치간 거리를 계산해서 해야할거 같습니다

  16. 알려주시면감사하겠습니다. 2020.04.27 20:26

    버튼을 누르면 장소가 뜨질않고 지오코더 서비스 사용불가라고 표시됩니다ㅠ
    로그캣에는 이런 오류가뜹니다 왜이런걸까요ㅠ?
    04-27 20:24:13.576 21064-21064/com.example.cafemoa D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
    04-27 20:24:13.706 21064-22252/com.example.cafemoa E/Places: https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=AIzaSyAAnmQJ-r5qOB7k_SHizeQGNhOtZgumDBE&location=37.3009075,127.0049686&radius=5000&type=cafe
    04-27 20:24:13.711 21064-22252/com.example.cafemoa I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
    04-27 20:24:14.366 21064-22252/com.example.cafemoa I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false
    04-27 20:24:14.551 21064-21064/com.example.cafemoa D/googlemap_example: onLocationResult : 위도:37.3008902 경도:127.0049624
    04-27 20:24:14.771 21064-22252/com.example.cafemoa E/Places: noman.googleplaces.PlacesException: REQUEST_DENIED
    04-27 20:24:14.771 21064-21064/com.example.cafemoa E/Places: noman.googleplaces.PlacesException: REQUEST_DENIED

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.04.27 20:48 신고

      에러는 인증오류입니다.

      1-5번 키 목록이 보이는 화면에서
      제한 사항이 없음으로 보이나요?

      키를 다시 만들어볼 필요가 있습니다.

    • 알려주시면감사하겠습니다. 2020.04.27 20:53

      그리고 앱을 종료했는데도 이런 오류가 계속해서 뜹니다ㅠㅠ
      04-27 20:51:37.831 25547-25654/com.example.cafemoa I/System.out: (HTTPLog)-Static: isSBSettingEnabled false

    • 답변감사합니다. 2020.04.27 20:54

      제한 사항이 없는 키로 해야하는건가요??

    • 알려주시면감사하겠습니다. 2020.04.27 21:15

      키를 다시 만들어서 제한사항이 없는걸로 수정하였습니다.

      04-27 21:12:59.396 32368-779/com.example.cafemoa E/Places: https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=AIzaSyCZquZhwnyY-cdpWU9KiZCk-N_nWqF6aqY&location=37.3008939,127.0049453&radius=500&type=cafe
      04-27 21:12:59.396 32368-779/com.example.cafemoa I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
      04-27 21:12:59.401 32368-779/com.example.cafemoa W/System.err: java.net.UnknownHostException: Unable to resolve host "maps.googleapis.com": No address associated with hostname
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:457)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:215)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:367)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:295)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at noman.googleplaces.Parser.getInputStream(Parser.java:29)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at noman.googleplaces.PlacesParser.parseNearbyPlaces(PlacesParser.java:43)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at noman.googleplaces.AbstractPlaces.doInBackground(AbstractPlaces.java:47)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at noman.googleplaces.AbstractPlaces.doInBackground(AbstractPlaces.java:13)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.lang.Thread.run(Thread.java:818)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at libcore.io.Posix.android_getaddrinfo(Native Method)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:438)
      04-27 21:12:59.406 32368-779/com.example.cafemoa W/System.err: ... 22 more
      04-27 21:12:59.406 32368-779/com.example.cafemoa E/Places: noman.googleplaces.PlacesException: Result is null
      04-27 21:12:59.421 32368-32368/com.example.cafemoa E/Places: noman.googleplaces.PlacesException: Result is null

      이렇게 뜹니다ㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.04.27 21:29 신고

      다시해보세요..

      로그에 있는 다음 주소를 웹브라우저에 붙여넣기하니 잘 동작하네요

      https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=AIzaSyCZquZhwnyY-cdpWU9KiZCk-N_nWqF6aqY&location=37.3008939,127.0049453&radius=500&type=cafe

    • 답변감사합니다 2020.04.27 22:52

      계속 다시 해본 결과 위에 말씀드린 (HTTPLog)-Static: isSBSettingEnabled false 오류와 지오코더 서비스 사용 불가라고 뜨는데 이것들은 무시해도되는건가요? 계속 저렇게 뜨고 장소는 보이질 않아서요ㅠㅠ

    • 감사합니다 2020.04.27 22:59

      감사합니다 해결하였습니다! 혹시 장소를 눌렀을때 위치말고 다른 정보를 불러오게 하거나 다른 화면으로 전환할 수 있는 방법은 없을까요?

  17. teoreoreok 2020.05.06 05:19

    안녕하세요 보고 많이 배우고 있습니다.
    띄운 가게 정보(이름과 위치) 를 데이터베이스에 넣고싶은데 방법이 있을까요?

  18. Dnddl 2020.05.10 15:45

    안녕하세요 형님 앞 글 보면서 차근차근 잘 따라하여 여기까지 성공하였습니다. 저는 주변 카페가 뜨도록 하였는데 혹시 지도를 움직였을때 그 주변 카페까지 뜨게하는 방법은 없을까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.05.10 16:59 신고

      다음 링크의 카메라 변경 이벤트에 있는 예제 코드를 참고하세요. 카메라 이동시 장소가 출력되도록하면 될듯합니다

      https://developers.google.com/maps/documentation/android-sdk/events?hl=ko

    • Dnddl 2020.05.11 00:57

      예제 코드를 참고하여서 해봤는데 잘 되질않네요..
      마지막으로 질문 하나 더 드리겠습니다.
      혹시 지도에 현재위치가 아닌 어느 특정한 위치를 띄워 주변카페를 볼 수 있게하는 방법도 있을까요?
      처음 서울 좌표를 찍는 포스팅 코드를 이용해서 해보려했는데 잘 안되서요ㅠ

    • Dnddl 2020.05.11 02:22

      import androidx.appcompat.app.AppCompatActivity;

      import android.content.Intent;
      import android.os.Bundle;
      import android.view.Menu;
      import android.view.MenuInflater;
      import android.view.MenuItem;
      import android.view.View;
      import android.widget.Button;

      import com.google.android.gms.maps.CameraUpdateFactory;
      import com.google.android.gms.maps.GoogleMap;
      import com.google.android.gms.maps.OnMapReadyCallback;
      import com.google.android.gms.maps.SupportMapFragment;
      import com.google.android.gms.maps.internal.ILocationSourceDelegate;
      import com.google.android.gms.maps.model.LatLng;
      import com.google.android.gms.maps.model.Marker;
      import com.google.android.gms.maps.model.MarkerOptions;

      import java.util.ArrayList;
      import java.util.HashSet;
      import java.util.List;

      import noman.googleplaces.NRPlaces;
      import noman.googleplaces.Place;
      import noman.googleplaces.PlaceType;
      import noman.googleplaces.PlacesException;
      import noman.googleplaces.PlacesListener;

      public class HomeActivity extends AppCompatActivity
      implements
      OnMapReadyCallback,
      PlacesListener {

      private GoogleMap mMap;

      List<Marker> previous_marker = null;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_home);

      previous_marker = new ArrayList<Marker>();

      Button cafeButton = (Button)findViewById(R.id.cafeButton);
      cafeButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      LatLng location = null;
      showPlaceInformation(location);
      }
      });

      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
      .findFragmentById(R.id.map);
      mapFragment.getMapAsync(this);

      }

      @Override
      public void onMapReady(final GoogleMap googleMap) {

      mMap = googleMap;

      LatLng SUWON = new LatLng(37.2802381, 127.0079737);

      MarkerOptions markerOptions = new MarkerOptions();
      markerOptions.position(SUWON);
      markerOptions.title("행궁동");
      mMap.addMarker(markerOptions);

      mMap.moveCamera(CameraUpdateFactory.newLatLng(SUWON));
      mMap.animateCamera(CameraUpdateFactory.zoomTo(10));

      mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {

      @Override
      public void onInfoWindowClick(Marker marker) {

      Intent intent = new Intent(getBaseContext(), InformationActivity.class);

      String title = marker.getTitle();
      String address = marker.getSnippet();

      intent.putExtra("title", title);
      intent.putExtra( "address", address);

      startActivity(intent);
      }
      });
      }


      @Override
      public void onPlacesFailure(PlacesException e) {

      }

      @Override
      public void onPlacesStart() {

      }

      @Override
      public void onPlacesSuccess(final List<Place> places) {
      runOnUiThread(new Runnable() {
      @Override
      public void run() {
      for (noman.googleplaces.Place place : places) {

      LatLng latLng
      = new LatLng(place.getLatitude()
      , place.getLongitude());



      MarkerOptions markerOptions = new MarkerOptions();
      markerOptions.position(latLng);
      markerOptions.title(place.getName());
      String markerSnippet = null;
      markerOptions.snippet(markerSnippet);
      Marker item = mMap.addMarker(markerOptions);
      previous_marker.add(item);

      }

      //중복 마커 제거
      HashSet<Marker> hashSet = new HashSet<Marker>();
      hashSet.addAll(previous_marker);
      previous_marker.clear();
      previous_marker.addAll(hashSet);

      }
      });

      }

      @Override
      public void onPlacesFinished() {

      }
      public void showPlaceInformation(LatLng location)
      {
      mMap.clear();//지도 클리어

      if (previous_marker != null)
      previous_marker.clear();//지역정보 마커 클리어

      new NRPlaces.Builder()
      .listener(HomeActivity.this)
      .key("AIzaSyCZquZhwnyY-cdpWU9KiZCk-N_nWqF6aqY")
      .latlng(37.2802381, 127.0079737)
      .radius(500) //500 미터 내에서 검색
      .type(PlaceType.CAFE) //음식점
      .build()
      .execute();
      }

      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.homemenu,menu);
      return true;
      }

      public boolean onOptionsItemSelected(MenuItem item){
      switch (item.getItemId()){
      case R.id.loginMenu:
      Intent intent =new Intent(HomeActivity.this,LoginActivity.class);
      HomeActivity.this.startActivity(intent);

      }
      return true;
      }



      }


      앞 포스팅들 다시 보면서 수정하여 제가 원하는 지역을 불러와서 주변 카페 표시하는거까지 성공하였습니다. 그런데 카페 이름은 뜨는데 주소는 나오질 않아서요 뭐가 문제인지 봐주실수있나요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.05.11 07:47 신고

      다음 코드가 빠졌네요

      String markerSnippet = getCurrentAddress(latLng);

  19. teoreoreok 2020.05.12 01:34

    안녕하세요! 저번에 댓글달아주셔서 잘해결했습니다.
    혹시 레스토랑말고 다른 카테고리랑 동시에 띄울수 있을까요?
    카페나 빵집도 표시하고 싶어서요!

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.05.12 06:05 신고

      카테고리별로 검색해서 한번에 보여주면 될듯합니다

  20. jomin 2020.05.16 03:33

    안녕하세요 졸업프로젝트로 지금 블로그글 잘 참고하면서 작업하고 있는 대학생입니다.

    제가 작업을하다가 주변 위치정보를 구현하는게 필요해서 참고하면서 작업하려하는데요.
    문제가 menifest에서 implementation 'noman.placeapi:placeAPI:1.1.3' 이구분 즉, 위임이 되지않고 다음과같은 메세지가 뜨는데요..(false 설정도 했습니다..!)
    ERROR: Failed to resolve: noman.placeapi:placeAPI:1.1.3
    Show in Project Structure dialog
    Affected Modules: app
    혹시 해결방법이 어떻게하면 될까요..? ㅠㅠ

  21. min123 2020.05.22 07:57

    안녕하세요 포스팅글 잘보고 작성하면서 공부하고 있습니다.
    그런데 코드 작성중에
    public void showPlaceInformation(LatLng location){
    map.clear();

    if(previous_marker != null)
    previous_marker.clear();

    new NRPlaces().Builder()
    .listner(MainActivity.this)
    .key("AIzaSyAljicDooqkMvYXhXMHVoyyIbFX2MUPEc8")
    .radius(500)
    .type(PlaceType.CAFE)
    .language("ko","KR")
    .build()
    .execure();
    }
    에서 NRPlaces 클래스가 private로 처리되어있어서 그런제 컴파일이 되지 않습니다. Grandle 에서 implement까지 완료했는데 왜 안되는건지 해결방법이 궁금해서 글 남깁니다..!

    에러 메세지는 다음과 같이 나옵니다.

    'NRPlaces(noman.googleplaces.NRPlaces.Builder)' has private access in
    'noman.googleplaces.NRPlaces'

+ Recent posts