위치기반으로 자기위치잡고 특정위치에 마커 띄우는 소스입니다.
갤럭시s로 테스트 하고있는데 gps를 끈 상태에서는 현재위치에 약간에 오차가있지만
잘 작동합니다.
근데 gps를 킨상태에서 실행시키면 오류가 발생합니다. 도무지 모르겠습니다.
좀봐주신다면 정말로 감사하겠습니다 ㅠㅠㅠ 아 어디 도움요청할곳이없네요..
logCat에서 나온 at sol.samtle.EventMap.onCreate(EventMap.java:285) 이부분은
소스를 쭉내려보신다면 빨간색+bold등등 딱 눈에 띄게해놨습니다.
도저히 감안잡히고 급해서 소스 전문을 올립니다 좀 많이 길지만 양해부탁드립니다 ㅠ
logCat
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): FATAL EXCEPTION: main
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): java.lang.RuntimeException: Unable to start activity ComponentInfo{sol.samtle/sol.samtle.EventMap}: java.lang.NullPointerException
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2668)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.ActivityThread.access$2300(ActivityThread.java:126)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.os.Handler.dispatchMessage(Handler.java:99)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.os.Looper.loop(Looper.java:123)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.ActivityThread.main(ActivityThread.java:4632)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at java.lang.reflect.Method.invokeNative(Native Method)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at java.lang.reflect.Method.invoke(Method.java:521)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at dalvik.system.NativeStart.main(Native Method)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): Caused by: java.lang.NullPointerException
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at sol.samtle.EventMap.onCreate(EventMap.java:285)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2632)
09-02 17:26:17.314: ERROR/AndroidRuntime(3944): ... 11 more
package sol.samtle;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
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.Overlay;
import com.google.android.maps.OverlayItem;
public class EventMap extends MapActivity implements View.OnClickListener, DialogInterface.OnClickListener{
private static final String TAG = EventMap.class.toString();
private static boolean result = false;
private String favor;
private LocationManager locationManager;
private String provider;
private Location location;
private MapController mapController;
private MapView mapView;
private GeoPoint favPoint;
private GeoPoint searchPoint;
boolean isExist=false;
SQLiteDatabase db;
Double dbin_lat, dbin_lng, dbout_lat, dbout_lng;
static EditText searchText;
Double searchLat, searchLng;
ArrayList<String> stName = new ArrayList<String>();
ArrayList<String> stCity = new ArrayList<String>();
ArrayList<String> stGu = new ArrayList<String>();
ArrayList<String> proDc = new ArrayList<String>();
ArrayList<String> proExplain = new ArrayList<String>();
ArrayList<String> stPhone = new ArrayList<String>();
ArrayList<Double> stLat = new ArrayList<Double>();
ArrayList<Double> stLng = new ArrayList<Double>();
ArrayList<String> stImg = new ArrayList<String>();
ArrayList<String> stCt = new ArrayList<String>();
ArrayList<String> stComp = new ArrayList<String>();
ArrayList<String> stUrl = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
menu.add(0,1,0,"즐겨찾기(1)으로 이동");
menu.add(0,2,0,"즐겨찾기(2)으로 이동");
menu.add(0,3,0,"즐겨찾기(3)으로 이동");
SubMenu etc = menu.addSubMenu("현재위치 저장");
etc.add(0,4,0,"즐겨찾기(1)에 저장");
etc.add(0,5,0,"즐겨찾기(2)에 저장");
etc.add(0,6,0,"즐겨찾기(3)에 저장");
openDatabase();
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
//mapView = (MapView) findViewById(R.id.mapview1);
switch (item.getItemId()){
case 1:
favor="favo1";
useCursor1();
if(isExist){
mapController.animateTo(favPoint);
mapController.setZoom(17);
Toast.makeText(this,"즐겨찾기1로 이동합니다. ",3000).show(); //즐겨찾기(1)로 e동함수
}
return true;
case 2:
favor="favo2";
useCursor1();
if(isExist){
mapController.animateTo(favPoint);
mapController.setZoom(17);
Toast.makeText(this,"즐겨찾기2로 이동합니다. ",3000).show();
}
return true;
case 3:
favor="favo3";
useCursor1();
if(isExist){
mapController.animateTo(favPoint);
mapController.setZoom(17);
Toast.makeText(this,"즐겨찾기3로 이동합니다. ",3000).show();
}
return true;
case 4:
GeoPoint centerPoint1 = mapView.getProjection().fromPixels(mapView.getWidth()/2, mapView.getBottom()/2);
int lat1=(int)centerPoint1.getLatitudeE6(); //즐겨찾기(1)에 넣을 위도값 = lat1
int lng1=(int)centerPoint1.getLongitudeE6();//즐겨찾기(1)에 넣을 경도값 = lat2
favor="favo1";
if(location != null){
dbin_lat = (double)lat1;
dbin_lng = (double)lng1;
insertLocData();
}
return true;
case 5:
GeoPoint centerPoint2 = mapView.getProjection().fromPixels(mapView.getWidth()/2, mapView.getBottom()/2);
int lat2=(int)centerPoint2.getLatitudeE6(); //즐겨찾기(2)에 넣을 위도값 = lat2
int lng2=(int)centerPoint2.getLongitudeE6();//즐겨찾기(2)에 넣을 경도값 = lat2
favor="favo2";
if(location != null){
dbin_lat = (double)lat2;
dbin_lng = (double)lng2;
insertLocData();
}
return true;
case 6:
GeoPoint centerPoint3 = mapView.getProjection().fromPixels(mapView.getWidth()/2, mapView.getBottom()/2);
int lat3=(int)centerPoint3.getLatitudeE6(); //즐겨찾기(3)에 넣을 위도값 = lat3
int lng3=(int)centerPoint3.getLongitudeE6();//즐겨찾기(3)에 넣을 경도값 = lat3
favor="favo3";
if(location != null){
dbin_lat = (double)lat3;
dbin_lng = (double)lng3;
insertLocData();
}
return true;
}
return false;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
mapView = (MapView) findViewById(R.id.mapview1);
mapView.setBuiltInZoomControls(true);
loadGps();
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable_me = this.getResources().getDrawable(R.drawable.me);
MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable_me,this);
parsingMark();
double lat=0, lng=0;
for(int i=0;i<stName.size();i++){
int ct=0;
if(stCt.get(i).equals("cafe")) ct=1;
if(stCt.get(i).equals("food")) ct=2;
if(stCt.get(i).equals("movie")) ct=3;
if(stCt.get(i).equals("musical")) ct=3;
if(stCt.get(i).equals("etc")) ct=4;
switch(ct){
case 1:
Drawable drawable_cafe; //////////////////////////cafe marker
drawable_cafe = getResources().getDrawable(R.drawable.cafe_marker);
MyItemizedOverlay2 itemizedOverlay;
itemizedOverlay = new MyItemizedOverlay2(drawable_cafe, mapView);
itemizedOverlay.setStat(stName.get(i), stCity.get(i), stGu.get(i),proDc.get(i),proExplain.get(i), stImg.get(i),
stComp.get(i), stUrl.get(i), stLat.get(i), stLng.get(i), stPhone.get(i));
lat= stLat.get(i);
lng = stLng.get(i);
GeoPoint point1 = new GeoPoint((int)(lat*1E6),(int)(lng*1E6));
OverlayItem overlayItem = new OverlayItem(point1,stName.get(i), proExplain.get(i));
itemizedOverlay.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay);
break;
case 2:
Drawable drawable_food; //////////////////////////food marker
drawable_food = getResources().getDrawable(R.drawable.food_marker);
MyItemizedOverlay2 itemizedOverlay2;
itemizedOverlay2 = new MyItemizedOverlay2(drawable_food, mapView);
itemizedOverlay2.setStat(stName.get(i), stCity.get(i), stGu.get(i),proDc.get(i),proExplain.get(i), stImg.get(i),
stComp.get(i), stUrl.get(i), stLat.get(i), stLng.get(i), stPhone.get(i));
lat= stLat.get(i);
lng = stLng.get(i);
GeoPoint point2 = new GeoPoint((int)(lat*1E6),(int)(lng*1E6));
OverlayItem overlayItem2 = new OverlayItem(point2,stName.get(i), proExplain.get(i));
itemizedOverlay2.addOverlay(overlayItem2);
mapOverlays.add(itemizedOverlay2);
break;
case 3:
Drawable drawable_seeing; //////////////////////////seeing marker
drawable_seeing = getResources().getDrawable(R.drawable.seeing_marker);
MyItemizedOverlay2 itemizedOverlay3;
itemizedOverlay3 = new MyItemizedOverlay2(drawable_seeing, mapView);
itemizedOverlay3.setStat(stName.get(i), stCity.get(i), stGu.get(i),proDc.get(i),proExplain.get(i), stImg.get(i),
stComp.get(i), stUrl.get(i), stLat.get(i), stLng.get(i), stPhone.get(i));
lat= stLat.get(i);
lng = stLng.get(i);
GeoPoint point3 = new GeoPoint((int)(lat*1E6),(int)(lng*1E6));
OverlayItem overlayItem3 = new OverlayItem(point3,stName.get(i), proExplain.get(i));
itemizedOverlay3.addOverlay(overlayItem3);
mapOverlays.add(itemizedOverlay3);
break;
case 4:
Drawable drawable_etc; //////////////////////////etc marker
drawable_etc = getResources().getDrawable(R.drawable.etc_marker);
MyItemizedOverlay2 itemizedOverlay4;
itemizedOverlay4 = new MyItemizedOverlay2(drawable_etc, mapView);
itemizedOverlay4.setStat(stName.get(i), stCity.get(i), stGu.get(i),proDc.get(i),proExplain.get(i), stImg.get(i),
stComp.get(i), stUrl.get(i), stLat.get(i), stLng.get(i), stPhone.get(i));
lat= stLat.get(i);
lng = stLng.get(i);
GeoPoint point4 = new GeoPoint((int)(lat*1E6),(int)(lng*1E6));
OverlayItem overlayItem4 = new OverlayItem(point4,stName.get(i), proExplain.get(i));
itemizedOverlay4.addOverlay(overlayItem4);
mapOverlays.add(itemizedOverlay4);
break;
}
}
//GeoPoint point = new GeoPoint((int)(37.504738*1E6),(int)(127.025385*1E6));
GeoPoint point = new GeoPoint((int)(location.getLatitude()*1E6),(int)(location.getLongitude()*1E6));
OverlayItem overlayitem = new OverlayItem(point, "현재 위치입니다. ", "-주변환경에따라 약간에 오차가있을수 있습니다.");
itemizedoverlay.addOverlay(overlayitem);
favPoint = point;
mapController = mapView.getController();
mapController.setCenter(point);
Log.d("mapco", "map "+ point);
mapController.setZoom(17);
mapOverlays.add(itemizedoverlay);
ImageButton button1 = (ImageButton)findViewById(R.id.topButton1);
button1.setOnClickListener(new ImageButton.OnClickListener(){
public void onClick(View v){
onBackPressed();
}
});
ImageButton button2 = (ImageButton)findViewById(R.id.topButton2);
button2.setOnClickListener(new ImageButton.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(EventMap.this, category.class);
startActivity(intent);
}
});
ImageButton button3 = (ImageButton)findViewById(R.id.topButton3);
button3.setOnClickListener(this);
}
public void parsingMark(){
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://211.109.180.26:9080/couponWeb/xmlAll.jsp");
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
//Log.d("address" , "Is = "+searchText.getText().toString());
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
//Execute Http post request
HttpResponse response = null;
InputStream is = null;
response = httpclient.execute(httppost);
HttpEntity entityResponse = response.getEntity();
is = entityResponse.getContent();
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
parserCreator.setNamespaceAware(true);
XmlPullParser parser = parserCreator.newPullParser();
parser.setInput(is, "utf-8");
// parser.setInput(new InputStreamReader(response.getEntity().getContent()));
// parser.setInput(text.openStream(), null);
int parserEvent = parser.getEventType();
String tag, chTag;
chTag="";
boolean inTitle=false;
while(parserEvent != XmlPullParser.END_DOCUMENT) {
switch(parserEvent) {
case XmlPullParser.TEXT:
tag = parser.getName();
if(inTitle) {
//Log.i("tag", "Title = " +chTag);
if(chTag.compareTo("st_name") == 0) stName.add(parser.getText());
if(chTag.compareTo("st_city") == 0) stCity.add(parser.getText());
if(chTag.compareTo("st_gu") == 0) stGu.add(parser.getText());
if(chTag.compareTo("pro_dc") == 0) proDc.add(parser.getText());
if(chTag.compareTo("pro_explain") == 0) proExplain.add(parser.getText());
if(chTag.compareTo("st_phone")== 0 ) stPhone.add(parser.getText());
if(chTag.compareTo("st_lat") == 0 ) stLat.add(Double.parseDouble(parser.getText()));
if(chTag.compareTo("st_lng") == 0 ) stLng.add(Double.parseDouble(parser.getText()));
if(chTag.compareTo("st_img") == 0) stImg.add(parser.getText());
if(chTag.compareTo("st_cate") == 0) stCt.add(parser.getText());
if(chTag.compareTo("st_comp") == 0) stComp.add(parser.getText());
if(chTag.compareTo("st_url") == 0) stUrl.add(parser.getText());
}
break;
case XmlPullParser.END_TAG:
tag = parser.getName();
if(tag.compareTo("st_name") == 0) {
inTitle = false;
}
//Log.d("END_TAG", tag);
break;
case XmlPullParser.START_TAG:
if(parser.getName() == null){
continue;
}
inTitle = true;
tag = parser.getName();
//Log.d("START_TAG", tag);
if(tag.compareTo("st_name") == 0) inTitle = true;
if(tag.compareTo("pro_dc") == 0) inTitle = true;
if(tag.compareTo("pro_explain") == 0) inTitle = true;
if(tag.compareTo("coupon_start") == 0) inTitle = true;
if(tag.compareTo("coupon_end") == 0) inTitle = true;
if(tag.compareTo("st_start_time") == 0) inTitle = true;
if(tag.compareTo("st_end_time") == 0) inTitle = true;
if(tag.compareTo("st_lat") == 0) inTitle = true;
if(tag.compareTo("st_lng") == 0) inTitle = true;
if(tag.compareTo("st_city") == 0) inTitle = true;
if(tag.compareTo("st_gu") == 0) inTitle = true;
if(tag.compareTo("st_addr") == 0) inTitle = true;
if(tag.compareTo("st_phone") == 0) inTitle = true;
if(tag.compareTo("st_cate") == 0) inTitle = true;
if(tag.compareTo("st_img") == 0) inTitle = true;
if(tag.compareTo("st_comp") == 0) inTitle = true;
if(tag.compareTo("st_url") == 0) inTitle = true;
chTag = parser.getName();
//Log.d("tagName", "tag = " + chTag);
break;
}
parserEvent = parser.next();
}
}catch(Exception e) {
e.printStackTrace();
}
}
private void loadGps() {
Log.w(TAG , "loadGps Start" );
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
//GPS 환경설정
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 정확도
criteria.setPowerRequirement(Criteria.POWER_HIGH); // 전원 소비량
criteria.setAltitudeRequired(true); // 고도, 높이 값을 얻어 올지를 결정
criteria.setBearingRequired(true); // provider 기본 정보
criteria.setSpeedRequired(true); //속도
criteria.setCostAllowed(true); //위치 정보를 얻어 오는데 들어가는 비용
provider = locationManager.getBestProvider(criteria, true);
Log.i(TAG, "provider:"+provider);
if(provider == null){
result = chkGpsService();
if(result){
loadGps();
}
}else{
location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 2000, 10, loclistener);
if(location == null){
location = locationManager.getLastKnownLocation(provider);
if(location == null){
Log.w(TAG, "get Location From GPS Fail !!!!!");
AlertDialog.Builder adb = new AlertDialog.Builder(EventMap.this);
adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
adb.setTitle( R.string.Location_fail_title );
adb.setMessage(R.string.Location_fail_message);
adb.show();
}
}
}
}
private final LocationListener loclistener = new LocationListener(){
public void onLocationChanged(Location location) {
Log.w(TAG , "onLocationChanged" );
}
public void onProviderDisabled(String provider) {
Log.w(TAG , "onProviderDisabled" );
}
public void onProviderEnabled(String provider) {
Log.w(TAG , "onProviderEnabled" );
}
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.w(TAG , "onStatusChanged" );
}
};
private boolean chkGpsService() {
String gs = android.provider.Settings.Secure.getString(getContentResolver(),
android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
Log.w("chkGpsService" , "get GPs Service" );
if (gs.indexOf("gps", 0) < 0) {
Log.w("chkGpsService" , "status: off" );
AlertDialog.Builder gsDialog = new AlertDialog.Builder(this);
gsDialog.setTitle("GPS Status OFF !!!");
gsDialog.setMessage("Change Setting !!");
gsDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
}
}).create().show();
return false;
} else {
Log.w("chkGpsService" , "status: on" );
return true;
}
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
private void openDatabase() {
try {
db = SQLiteDatabase.openDatabase("data/data/sol.samtle/location.db", null, SQLiteDatabase.CREATE_IF_NECESSARY);
}catch(Exception e){
e.printStackTrace();
}
}
private void insertLocData() {
db.beginTransaction();
try{
db.execSQL("create table if not exists LocTable("
+"lat double, "
+"lng double, " +"favo text);");
String[] columns = {"lat","lng","favo"};
Cursor c = db.query("LocTable", columns, "favo='"+favor+"'",null , null, null, "");
c.moveToFirst();
if(c.getCount()==0){
Log.d("favorite", "d2d "+favor);
Log.d("favorite", "dd "+favor);
db.execSQL("insert into LocTable(lat, lng, favo)"+" values("+dbin_lat+","+dbin_lng+",'"+favor+"');");
if(favor.equals("favo1")) Toast.makeText(this, "즐겨찾기1에 등록되었습니다.",3000).show();
if(favor.equals("favo2")) Toast.makeText(this, "즐겨찾기2에 등록되었습니다.",3000).show();
if(favor.equals("favo3")) Toast.makeText(this, "즐겨찾기3에 등록되었습니다.",3000).show();
}else{
AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
alt_bld.setMessage("등록된 즐겨찾기입니다. 덮어 씌우시겠습니까?").setCancelable(false).setPositiveButton("예",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.d("click dbin" ," is = " +dbin_lng);
//db.execSQL("update LocTable set lat="+dbin_lat+" and lng="+dbin_lng+" where favo='"+favor+"';");
ContentValues updateValue = new ContentValues();
updateValue.put("lat", dbin_lat);
updateValue.put("lng", dbin_lng);
db.update("LocTable", updateValue, "favo='"+favor+"'",null);
}}).setNegativeButton("아니오",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}});
AlertDialog alert = alt_bld.create();
alert.setTitle("즐겨찾기 덮어쓰기 확인 ");
alert.show();
}
c.close();
db.setTransactionSuccessful();
}catch(Exception e) {
e.printStackTrace();
}
finally{
db.endTransaction();
}
}
private void useCursor1(){
try{
String[] columns = {"lat","lng","favo"};
Cursor c = db.query("LocTable", columns, "favo='"+favor+"'", null, null, null, "");
c.moveToFirst();
if(c.getCount()>=1){
int int_favo=c.getColumnIndex("favo");
String is_favo = c.getString(int_favo);
Log.d("favor" ,"is = "+favor);
Log.d("favor is ","is = "+is_favo);
if(is_favo.equals(favor)){
int int_lat = c.getColumnIndex("lat");
dbout_lat = c.getDouble(int_lat);
int int_lng = c.getColumnIndex("lng");
dbout_lng = c.getDouble(int_lng);
favPoint = new GeoPoint((int)(((dbout_lat*0.00000001)*100)*1E6), (int)(((dbout_lng*0.00000001)*100)*1E6));
isExist=true;
}else{
isExist=false;
Toast.makeText(this,"즐겨찾기가 존재 하지 않습니다. 먼저 등록해주세요. ",5000).show();
}
c.close();
}else{
Toast.makeText(this, "등록된 즐겨찾기가 없습니다. ",3000).show();
c.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
public static void showTextDialog(final Activity activity, String title, String text,
String hint, DialogInterface.OnClickListener listener){
searchText = new EditText(activity);
searchText.setText(text);
searchText.setHint(hint);
AlertDialog.Builder ad = new AlertDialog.Builder(activity);
ad.setTitle(title);
ad.setView(searchText);
ad.setPositiveButton("검색", listener);
ad.setNegativeButton("취소", listener);
ad.show();
}
public void onClick(DialogInterface dialog, int which) {
String txt = searchText.getText().toString();
parsingLoc();
if(searchLat!=null){
searchPoint = new GeoPoint((int)(searchLat*1E6), (int)(searchLng*1E6));
mapController.animateTo(searchPoint);
mapController.setZoom(17);
Toast.makeText(this,searchText.getText().toString()+" 이동합니다. ",4000).show();
searchLat=null;
searchLng=null;
}else{
Toast.makeText(this, "검색어를 다시 한번 확인해주세요.", 4000).show();
}
}
public void parsingLoc(){
HttpClient httpclient = new DefaultHttpClient();
String url = searchText.getText().toString();
String url2;
url2 = url.replaceAll("\\p{Space}", "%20");
HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/xml?address="+url2+"&sensor=true");
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
//Execute Http post request
HttpResponse response = null;
InputStream is = null;
response = httpclient.execute(httppost);
HttpEntity entityResponse = response.getEntity();
is = entityResponse.getContent();
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
parserCreator.setNamespaceAware(true);
XmlPullParser parser = parserCreator.newPullParser();
parser.setInput(is, "utf-8");
// parser.setInput(new InputStreamReader(response.getEntity().getContent()));
// parser.setInput(text.openStream(), null);
int parserEvent = parser.getEventType();
String tag;
boolean check_geocode=false;
boolean check_result=false;
boolean check_geometry=false;
boolean check_location=false;
boolean check_lat=false;
boolean check_lng=false;
while(parserEvent != XmlPullParser.END_DOCUMENT) {
switch(parserEvent) {
case XmlPullParser.TEXT:
if(check_geocode && check_result && check_geometry && check_location && check_lat){
searchLat = (Double.parseDouble(parser.getText()));
}
if(check_geocode && check_result && check_geometry && check_location && check_lng) {
searchLng = (Double.parseDouble(parser.getText()));
}
break;
case XmlPullParser.END_TAG:
tag = parser.getName();
if(tag.compareTo("GeocodeResponse")==0) check_geocode=false;
if(tag.compareTo("result")==0) check_result=false;
if(tag.compareTo("geometry")==0) check_geometry=false;
if(tag.compareTo("location") == 0) check_location=false;
if(tag.compareTo("lat") ==0) check_lat=false;
if(tag.compareTo("lng")==0) check_lng=false;
break;
case XmlPullParser.START_TAG:
tag=parser.getName();
if(tag.compareTo("GeocodeResponse")==0) check_geocode=true;
if(tag.compareTo("result")==0) check_result=true;
if(tag.compareTo("geometry")==0) check_geometry=true;
if(tag.compareTo("location") == 0) check_location=true;
if(tag.compareTo("lat") ==0) check_lat=true;
if(tag.compareTo("lng")==0) check_lng=true;
break;
}
//Log.d("iterator", "i = " + i);
//i++;
parserEvent = parser.next();
}
}catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showTextDialog(this, "지역 검색", "", "검색어를 입력하세요", this);
}
}




대책없는 질문인거같아서 죄송합니다 ㅠ
혹시 오류가무엇인지 알기에 부족한부분이있나요?
퍼미션은
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
허용해놨습니다
//GPS 환경설정
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 정확도
criteria.setPowerRequirement(Criteria.POWER_HIGH); // 전원 소비량
criteria.setAltitudeRequired(true); // 고도, 높이 값을 얻어 올지를 결정
criteria.setBearingRequired(true); // provider 기본 정보
criteria.setSpeedRequired(true); //속도
criteria.setCostAllowed(true); //위치 정보를 얻어 오는데 들어가는 비용