마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

공공데이터 api 이용해서 약국 띄우기

0 추천

https://m.blog.naver.com/yandul83/220436066801 이 사이트를 보면서 해봤는데 서울역 마커까진 뜨는데 약국이 안뜨네요ㅠㅠㅠ 

도와주세요 오류도 안뜨고 url에도 문제 없는거 같거든요

dto파일 있는데 그냥 X좌표,Y좌표, name getter,setter로 이루어져 있습니다!!

메인
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mGoogleMap;

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

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {
        
        if (mGoogleMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);

          
            if (mGoogleMap != null) {
                setUpMap();
            }
        }
    }

    private void setUpMap() {

      PharmParser parser = new PharmParser();
        ArrayList<PharmDTO> list = null;
        try {
            list =parser.apiParserSearch();
        } catch (Exception e) {
            e.printStackTrace();
        }

        for(PharmDTO entity : list) {
            MarkerOptions options = new MarkerOptions();
            options.position(new LatLng(entity.getYpos(), entity.getXpos()));
            options.title(entity.getName());
            options.icon(BitmapDescriptorFactory.fromResource(R.drawable.pills));

            mGoogleMap.addMarker(options);
        }

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
      googleMap.moveCamera(CameraUpdateFactory.newLatLng(
                new LatLng(37.555744, 126.970431)   // 위도, 경도
        ));

        CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
        googleMap.animateCamera(zoom);   ,

        MarkerOptions marker = new MarkerOptions();
        marker .position(new LatLng(37.555744, 126.970431))
                .title("서울역");
        googleMap.addMarker(marker).showInfoWindow();

    }
}

파싱

public class PharmParser {
    public final static String PHARM_URL = "http://apis.data.go.kr/B551182/pharmacyInfoService/getParmacyBasisList";
    public final static String KEY = "':

    public PharmParser() {
        try {
            apiParserSearch();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public ArrayList<PharmDTO> apiParserSearch() throws Exception {
        URL url = new URL(getURLParam(null));

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();
        BufferedInputStream bis = new BufferedInputStream(url.openStream());
        xpp.setInput(bis, "utf-8");

        String tag = null;
        int event_type = xpp.getEventType();

        ArrayList<PharmDTO> list = new ArrayList<PharmDTO>();

        String xpos = null, ypos= null,name=null;
        while (event_type != XmlPullParser.END_DOCUMENT) {
            if (event_type == XmlPullParser.START_TAG) {
                tag = xpp.getName();
            } else if (event_type == XmlPullParser.TEXT) {
               
                if(tag.equals("XPos")){
                    xpos = xpp.getText();
                    System.out.println(xpos);
                }else if(tag.equals("YPos")){
                    ypos = xpp.getText();
                }else if(tag.equals("yadmNm")){
                    name = xpp.getText();
                }
            } else if (event_type == XmlPullParser.END_TAG) {
                tag = xpp.getName();
                if (tag.equals("item")) {
                    PharmDTO entity = new PharmDTO();
                    entity.setXpos(Double.valueOf(xpos));
                    entity.setYpos(Double.valueOf(ypos));
                    entity.setName(name);

                    list.add(entity);
                }
            }
            event_type = xpp.next();
        }
        System.out.println(list.size());

        return list;
    }

    private String getURLParam(String search){
        String url = PHARM_URL+"?ServiceKey="+KEY;
        if(search != null){
            url = url+"&yadmNm"+search;
        }
        return url;
    }
    public static void main(String[] args) {
        new PharmParser();
    }
}

 

밍기뉴 (140 포인트) 님이 2018년 8월 6일 질문

2개의 답변

0 추천
KEY 변수가 API인증키값 같은데 저부분이 없어서 그런게 아닐까요?
익명사용자 님이 2018년 8월 7일 답변
0 추천
일단 네트워크 작업을 메인스레드에서 하시는 것 같습니다.

별도의 스레드로 작업하셔야 합니다.

만약 별도의 스레드로 작업하시고 있다면 아래 과정을 확인하시기 바랍니다.

1. 요청 url에 대한 데이터를 확인합니다.

2. 데이터가 이상하다면 url 및 파라미터를 확인합니다.

3. 데이터가 이상없다면 파싱하는 과정에 에러가 발생하는지 데이터는 제대로 파싱하는지 디버깅합니다.

4. 파싱까지 이상이 없다면 지도에 마커를 등록할때 위도, 경도 값 확인과 이미지 리소스를 확인합니다.
원조안드로이드 (58,190 포인트) 님이 2018년 8월 7일 답변
...