본문 바로가기

내가 하는일/JAVA

[스크랩] 쿠폰및 할인되는 맛집 찾는 (예제

package kr.co.bitgo;

import! android.app.Activity;
import! android.content.Intent;
import! android.os.Bundle;
import! android.view.View;
import! android.view.View.OnClickListener;
import! android.widget.ImageButton;

public class CouponDiscountActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
 ImageButton ib;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        ib=(ImageButton)findViewById(R.id.imagebutton);
        ib.setOnClickListener(this);
    }
 @Override
 public void onClick(View arg0) {
  //새로운 클래스를 선언
  Intent intent=new Intent().setClass(CouponDiscountActivity.this, CouponKorea.class);
  startActivity(intent);
  
 }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////

 

package kr.co.bitgo;

import! android.app.ListActivity;
import! android.content.Intent;
import! android.os.Bundle;
import! android.view.View;
import! android.widget.AdapterView;
import! android.widget.AdapterView.OnItemClickListener;
import! android.widget.ArrayAdapter;
import! android.widget.ListView;

public class CouponKorea extends ListActivity implements OnItemClickListener{//ListActivity 는 ListView 가 탑재되어있기에 별도의 xml 파일이 필요없다

 private String[] korea={"서울","경기도","강원도","충청북도","충청남도","전라북도","전라남도","경상북도","경상남도","제주도"};
 public static int index;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setListAdapter(new ArrayAdapter<String>(this, R.layout.korealistitem, korea));
    
  ListView lv=getListView();
  lv.setTextFilterEnabled(true);// 필터링
  lv.setOnItemClickListener(this);
 }
 @Override
 public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
  // TODO Auto-generated method stub
  index=position; // 이벤트 발생시 몇번째 뷰가 눌려졌는지 알기위함
  Intent intent=new Intent().setClass(CouponKorea.this, CouponKoreaArea.class);
  startActivity(intent);
 }
    
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////

 

package kr.co.bitgo;

import! java.io.InputStream;
import! java.net.URL;
import! java.util.Vector;

import! org.xmlpull.v1.XmlPullParser;
import! org.xmlpull.v1.XmlPullParserFactory;

import! android.app.Activity;
import! android.app.ListActivity;
import! android.content.Intent;
import! android.os.Bundle;
import! android.util.Log;
import! android.util.Xml;
import! android.view.LayoutInflater;
import! android.view.View;
import! android.view.ViewGroup;
import! android.widget.AdapterView;
import! android.widget.AdapterView.OnItemClickListener;
import! android.widget.ArrayAdapter;
import! android.widget.ImageView;
import! android.widget.ListView;
import! android.widget.TextView;

public class CouponKoreaArea extends ListActivity implements OnItemClickListener{// 할인점 리스트
    // 하나의 리스트 뷰에 보여질 제목과 금액을 저장하기 위한 저장소
 Vector<String> titlevector;
 Vector<String> pricevector;
 Vector<KoreaBean> beanvector;
 // XML 데이터를 가져올 접속 주소
 String Uri="http://192.192.192.192:8080/cs/koreacoupon.xml";
 URL couponurl;
 String tagName, title="", address="", phone="", url="", price="", wido="", kyungdo="", contents="";
 //지역을 저장하는 변수선언
 String area, koreaArea;
 int index;
 private KoreaBean kb;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  
  index=CouponKorea.index;
  // 각지역의 이름을 저장
  
  if(index==0)area="seoul";
  else if(index==1)area="Gyeonggido";
  else if(index==2)area="GangWon";
  else if(index==3)area="Chungcheongbukdo";
  else if(index==4)area="ChoongchungNamDo";
  else if(index==5)area="Jeonbuk";
  else if(index==6)area="Jeollanamdo";
  else if(index==7)area="Gyeongsangbukdo";
  else if(index==8)area="Daegu";
  else if(index==9)area="Jejudo";
  //XML 데이터를 가져오는 작업
  getData();

  //리스트 뷰에 데이터를 붙임
  setListAdapter(new MyListAdapter(this));// ArrayAdapter 상속받아서 나만의 Adapter를 재정의 해줘야한다.
  
  ListView lv=getListView();
  lv.setTextFilterEnabled(true);
  lv.setOnItemClickListener(this);
 }
    private void getData() {
  // 저장공간 객체 생성
     titlevector=new Vector<String>();
     pricevector=new Vector<String>();
     beanvector=new Vector<KoreaBean>();
  
     try {
      //SAX 방식으로
      XmlPullParserFactory factory=XmlPullParserFactory.newInstance();//내부에 스테틱메서드가 있어서 newInstance로 만든다
      factory.setNamespaceAware(true);
      XmlPullParser xpp=factory.newPullParser();
      
      couponurl=new URL(Uri);
      InputStream in=couponurl.openStream();
      xpp.setInput(in, "utf-8");
      
     
      int eventtype=xpp.getEventType();
      while(eventtype!=XmlPullParser.END_DOCUMENT){
          if(eventtype==XmlPullParser.START_TAG){
           tagName=xpp.getName();
           if(tagName.equals("Item")){       
            koreaArea=xpp.getAttributeVal!ue(0);
           }
          }else if(eventtype==XmlPullParser.TEXT){
           if(koreaArea!=null){
            if(koreaArea.equals(area)){         
              if(tagName.equals("Title"))title+=xpp.getText();
              else if(tagName.equals("Address"))address+=xpp.getText();
              else if(tagName.equals("Phone"))phone+=xpp.getText();
              else if(tagName.equals("Url"))url+=xpp.getText();
              else if(tagName.equals("Wido"))wido+=xpp.getText();
              else if(tagName.equals("Kyungdo"))kyungdo+=xpp.getText();
              else if(tagName.equals("Contents"))contents+=xpp.getText();
              else if(tagName.equals("Price"))price+=xpp.getText();
            }
           }
          }else if(eventtype==XmlPullParser.END_TAG){
               tagName=xpp.getName();
               if(tagName.equals("Item")){
                if(koreaArea.equals(area)){
                 kb=new KoreaBean();
                 titlevector.add(title);
                 pricevector.add(price);
                 kb.setTitle(title);
                 kb.setAddress(address);
                 kb.setPhone(phone);
                 kb.setUrl(url);
                 kb.setWido(wido);
                 kb.setKyungdo(kyungdo);
                 kb.setContents(contents);
                 kb.setPrice(price);


                 beanvector.add(kb);
                 title=""; address=""; phone="";url="";price=""; wido=""; kyungdo=""; contents="";
                }
               }
          }
          eventtype=xpp.next();
       
      }  
  } catch (Exception e) {
   // TODO: handle exception
  }
     
 }
 //사용자 정의 어댑터 클래스
 class MyListAdapter extends ArrayAdapter{
        Activity con;//MyListAdapter 에서 ArrayAdapter에게 값을 넘겨주는 생성자
  public MyListAdapter(Activity context) {
   super(context, R.layout.koreaarealistitem, titlevector);
   con=context;
  }
  // 하나의 row(리스트의 한줄)을 디자인해서 리턴해주는 핵심 메소드
  //ArrayAdapter 가 가지고있는 메소드 getView 를 재정의 해주면된다(내가 원하는 형태로 작업하기위해)
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   // 레이아웃을 담당하는 메니저가있다 -> 레이아웃인플레이터
   LayoutInflater inflater=con.getLayoutInflater();// Activity에서 가져온다. 레이아웃을 핸들링하기위함
   View tmprow=inflater.inflate(R.layout.koreaarealistitem, null);
   
   TextView label1=(TextView) tmprow.findViewById(R.id.label1);// 가상의 아버지(tmprow)를 통해서 하나의 label1을 가져온다
   label1.setText("할인점명 :"+titlevector.get(position));
   TextView label2=(TextView) tmprow.findViewById(R.id.label2);
   label2.setText("가 격 :"+pricevector.get(position));
   
   // 이미지를 넣는 작업, 할인점명과 이미지명이 같으면 넣어라
   if(position%3==0){
    ImageView image=(ImageView) tmprow.findViewById(R.id.image);
    image.setImageResource(R.drawable.foodc);
   }else if(position%3==1){
    ImageView image=(ImageView) tmprow.findViewById(R.id.image);
    image.setImageResource(R.drawable.foodd);
   }else if(position%3==2){
    ImageView image=(ImageView) tmprow.findViewById(R.id.image);
    image.setImageResource(R.drawable.foode);  
     }
   return tmprow;
   }
   }
 @Override
 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
  // TODO Auto-generated method stub
  index=arg2;
  Intent intent=new Intent().setClass(CouponKoreaArea.this, CouponKoreaAreaDetail.class);
  startActivity(intent);
 }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////

리스트뷰에서 하나의 리스트를 클릭했을때 상세보기 기능을 성정

 

package kr.co.bitgo;

import! android.app.Activity;
import! android.content.Intent;
import! android.os.Bundle;
import! android.view.View;
import! android.view.View.OnClickListener;
import! android.widget.Button;
import! android.widget.TextView;

public class CouponKoreaAreaDetail extends Activity implements OnClickListener{
 TextView title, phone, address, url, price, contents;
 Button btn;
 KoreaBean kbean;
 int index;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.detail);
  
  title=(TextView) findViewById(R.id.title);
  address=(TextView) findViewById(R.id.address);
  phone=(TextView) findViewById(R.id.phone);
  url=(TextView) findViewById(R.id.url);
  price=(TextView) findViewById(R.id.price);
  contents=(TextView) findViewById(R.id.contents);
  
  btn=(Button) findViewById(R.id.map);
  
  index=CouponKoreaArea.index;
  //하나의 정보를 가져옴
  kbean=CouponKoreaArea.beanvector.get(index);
  
  title.setText("점포명 : "+kbean.getTitle());
  address.setText("주소 : "+kbean.getAddress());
  phone.setText("전화번호 : "+kbean.getPhone());
  url.setText("웹사이트 : "+kbean.getUrl());
  price.setText("할인금액 : "+kbean.getPrice());
  contents.setText("상세정보 :"+kbean.getContents());
  
  btn.setOnClickListener(this);
  
 }
 @Override
 public void onClick(View v) {
  Intent intent=new Intent().setClass(CouponKoreaAreaDetail.this, CouponKoreaAreaMap.class);
  startActivity(intent);
 }

}
//////////////////////////////////////////////////////////////////////////////////////////////////////

MapActivity 설정 자신의 위치와 맛집위치를 설정하는 Activity

 

package kr.co.bitgo;
import! java.util.List;

import! android.content.Context;
import! android.graphics.drawable.Drawable;
import! android.location!.Location!
import! android.location!.Location!Listener;
import! android.location!.Location!Manager;
import! android.os.Bundle;

import! com.google.android.maps.GeoPoint;
import! com.google.android.maps.MapActivity;
import! com.google.android.maps.MapController;
import! com.google.android.maps.MapView;
import! com.google.android.maps.OverlayItem;

import! com.google.android.maps.Overlay;


public class CouponKoreaAreaMap extends MapActivity implements LocationListener{
 MapController mc;
 MapItemizedOverlay mapoverlay;
 List<Overlay> overlayvector;
 int index;
 KoreaBean kbean;
 Double wido, kyungdo;
 MapView mapview;
 Drawable dw;
 float[] result=new float[3];
 String title;
 @Override
 protected boolean isRouteDisplayed() {
  
  return false;
 }

 @Override
 protected void onCreate(Bundle arg0) {
  super.onCreate(arg0);
  setContentView(R.layout.map);
  
  kbean=CouponKoreaArea.beanvector.get(CouponKoreaArea.index);
  
  wido=Double.parseDouble(kbean.getWido());
  kyungdo=Double.parseDouble(kbean.getKyungdo());
  title=kbean.getTitle();
  
  mapview=(MapView) findViewById(R.id.mapview);
  mapview.setBuiltInZoomControls(true);
  mapview.setSatellite(true);
  mc=mapview.getController();
  
  dw=getResources().getDrawable(R.drawable.pin); //내위치에 표시될 이미지 설정
  mapoverlay=new MapItemizedOverlay(dw, this);
  
  //GPS로부터 자신의 위치 수신받음
  LocationManager lm=(LocationManager) getSystemService(Context.LOCATION!_SERVICE);
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, this);
  
 }

 @Override
 public void onLocationChanged(Location location) {
  //자신의 위치로 이동
  if(location!=null){
   GeoPoint point=new GeoPoint((int)(location.getLatitude()*1000000), (int)(location.getLongitude()*1000000));
   mc.animateTo(point);
   mc.setZoom(15);
   overlayvector=mapview.getOverlays();
   overlayvector.remove(overlayvector); //초기화해준다.
   mapoverlay.addOverlay(new OverlayItem(point, "현위치", "방가방가"));
   overlayvector.add(mapoverlay);
   
   //거리구하는 공식
   Location.distanceBetween(location.getLatitude(), location.getLongitude(), wido, kyungdo, result);
   int distance=(int)result[0];
   //할인점위치
   dw=getResources().getDrawable(R.drawable.pin);
   mapoverlay=new MapItemizedOverlay(dw, this);
   GeoPoint p=new GeoPoint((int)(wido*1000000), (int)(kyungdo*1000000));
   mapoverlay.addOverlay(new OverlayItem(p, title, "내위치로부터 "+distance+"M에 있습니다"));
   overlayvector.add(mapoverlay);
  }
  
 }

 @Override
 public void onProviderDisabled(String arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void onProviderEnabled(String arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
  // TODO Auto-generated method stub
 
 }

}

///////////////////////////////////////////////////////////////////////////////////////////////////////

 

package kr.co.bitgo;

import! java.util.ArrayList;

import! android.app.Alert!Dialog;
import! android.content.Context;
import! android.graphics.drawable.Drawable;

import! com.google.android.maps.ItemizedOverlay;
import! com.google.android.maps.OverlayItem;

public class MapItemizedOverlay extends ItemizedOverlay {
    // 여러개의 이미지(앞핀->OverlayItem)를 저장하는 객체를 선언
 ArrayList<OverlayItem> overlays=new ArrayList<OverlayItem>(); //overlays-> 위도와 경도 정보
 Context ctx;
 public MapItemizedOverlay(Drawable defaultMarker, Context ctx) { //MapItemizedOverlay(이미지, 내용)을 받는다
  // Context ctx -> Dialog 때문에 생성
  super(boundCenterBottom(defaultMarker)); // 앞핀 위치를 센터 아래에설정 -> boundCenterBottom
  this.ctx=ctx;
  // TODO Auto-generated constructor stub
 }
    //  ArrayList에 이미지를 더해주는(추가)메서드
 public void addOverlay(OverlayItem overlay){
  overlays.add(overlay);
  populate(); //ArrayList에 저장되었다는걸 알려줌 -> populate
 }
 // callBack 메서드
 @Override
 protected OverlayItem createItem(int i) { //ArrayList 들어있는값이 순서적으로 호출해서 화면에 그림을 그린다.
       // ArrayList에 저장된 overlay를 빼오는 역활, size() 정보를 보고 빼옴
  return overlays.get(i);
 }

 @Override
 public int size() {
  // ArrayList 의 사이즈
  return overlays.size();
 }
 @Override
 protected boolean onTap(int index) { // overlay의 표시지점에 대한 정보를 출력
  // 해당번지에 해당되는 overlay값을 가져옴
  OverlayItem item=overlays.get(index); // OverlayItem -> 타이틀과 메세지를 설정
  Alert!Dialog.Builder dlg=new Alert!Dialog.Builder(ctx);//
  dlg.setTitle(item.getTitle());
  dlg.setMessage(item.getSnippet()); //getSnippet -> 메세지
  dlg.show();
  
  return true;
 }
   
}

 

출처 : JavaEE
글쓴이 : 땡글이 원글보기
메모 :

'내가 하는일 > JAVA' 카테고리의 다른 글

jquery 기본 함수 정의  (0) 2011.12.15
안드로이드 인텐트  (0) 2011.10.30
안드로이드 다이얼로그 구현  (0) 2011.09.20
jquery, ajax  (0) 2011.08.25
android sqlite 사용하기  (0) 2011.08.17