2012-10-05 3 views
0

Google지도에서 여러 마커로 작업하기 Android

MainActivity 유형의 인 클로징 인스턴스에 액세스 할 수 없습니다. MainActivity 유형의 둘러싸는 인스턴스로 할당을 한정해야합니다 (예 : x.new A(), x는 MainActivity의 인스턴스 임).

오류가 PLS 도와 코드

MyMapOverlays marker = new MyMapOverlays(p) ; 

사람이 라인에 MyLocationListener.java에서 코드 줄에 나오는?

을 heres 코드 :

MainActivity.class

package com.sample.dorm_locator_gps; 

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 android.os.Bundle; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 

public class MainActivity extends MapActivity { 
    LocationManager locMgr; 
    MyLocationListener locLstnr; 

    private MapView mapView; 
    private MapController mc; 

    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mapView = (MapView) findViewById(R.id.mapview1); 
     mc = mapView.getController(); 

     String coordinates[] = {"30", "71"}; 
     double lat = Double.parseDouble(coordinates[0]); 
     double lng = Double.parseDouble(coordinates[1]); 

     GeoPoint p = new GeoPoint(
       (int) (lat * 1E6), 
       (int) (lng * 1E6)); 

     mc.animateTo(p); 
     mc.setZoom(7); 
     mapView.invalidate(); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    /*My overlay Class starts*/ 
    class MyMapOverlays extends com.google.android.maps.Overlay 
    { 
     GeoPoint location = null; 

     public MyMapOverlays(GeoPoint location) 
     { 
      super(); 
      this.location = location; 
     } 

     @Override 
     public void draw(Canvas canvas, MapView mapView, boolean shadow) 
     { 
      super.draw(canvas, mapView, shadow); 
      //translate the screen pixels 
      Point screenPoint = new Point(); 
      mapView.getProjection().toPixels(this.location, screenPoint); 

      //add the image 
      canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.our_cross_image), 
        screenPoint.x, screenPoint.y , null); //Setting the image  location on the screen (x,y). 
     } 
    } 
    /*My overlay Class ends*/ 
} 

MyLocationListener.java 당신은 정적 클래스로 MyMapOverlays를 선언 할 필요가

package com.sample.dorm_locator_gps; 

import java.util.List; 
import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.sample.dorm_locator_gps.MainActivity.MyMapOverlays; 

import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.os.Bundle; 
import android.widget.Toast; 

public class MyLocationListener implements LocationListener 
{ 
    private MapController mc; 
    private MapView mapView; 

    public void onLocationChanged(Location loc) { 
     // TODO Auto-generated method stub 
     loc.getLatitude(); 
     loc.getLongitude(); 
     String Text = "My current location is: " + "Latitud = " + 
     loc.getLatitude() + "Longitud = " + loc.getLongitude(); 
     Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT).show(); 

     String coordinates[] = {""+loc.getLatitude(), ""+loc.getLongitude()}; 
     double lat = Double.parseDouble(coordinates[0]); 
     double lng = Double.parseDouble(coordinates[1]); 
     GeoPoint p = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6)); 
     mc.animateTo(p); 
     mc.setZoom(7); 

     //add a location marker. 
     MyMapOverlays marker = new MyMapOverlays(p) ; 
     List listOfOverLays = mapView.getOverlays(); 
     listOfOverLays.clear(); 
     listOfOverLays.add(marker); 
     mapView.invalidate(); 
    } 

    private Context getApplicationContext() { 
     // TODO Auto-generated method stub 
     return null; 

    } 

    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(),"Gps Disabled", Toast.LENGTH_SHORT).show(); 

    } 

    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show(); 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 
    } 
} 

답변

0

.

public static class MyMapOverlays..... 
1

문제를 해결하고 디자인을보다 유연하게됩니다 자신의 파일에 MyMapOverlays 클래스를 이동합니다.

현재 당신은 MyMapOverlays의 인스턴스를 만들기 위해 MainActivity의 인스턴스를 필요로하지만 MyLocationListener 클래스는 MainActivity 클래스 인식 할 필요가 없습니다. 별도의 파일로 이동하면 불필요한 연결이 끊어집니다.

+0

어떻게해야합니까? :( – user1519463

+0

새 클래스 만들기 (Eclipse에서는 File-> New-> Java-> Class입니다.) MyMapOverlays를 클래스 이름으로 사용하고 MainActivity에서 MyMapOverlays 클래스의 코드를 방금 만든 새 클래스로 이동합니다. 희망이 도움이됩니다. – acj

관련 문제