0

我试图用 myLocationOverlay.getMyLocation(); 但它总是返回null,我尝试启用gps,禁用,启用网络,都启用但总是返回null。任何人都可以帮助我吗?

如果这可以帮助任何处于我情况的人,我会把我所有的课程

editarLugar extends MapActivity implements LocationListener{

双纬双经 GeoPoint yo DataBaseHelper ayudabbdd MapView eMapa MapController controladorMapa TextView eNombre TextView eDesc ImageView eFoto File archivoImagen Uri imageUri

私人MyLocationOverlay myLocationOverlay;

public void onCreate(Bundle savedInstanceState) {     
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.editarlugar);   

     eNombre = (TextView) findViewById(R.id.eNombre);
     eDesc = (TextView) findViewById(R.id.eDesc);
     eFoto = (ImageView) findViewById(R.id.eFoto);
     eMapa = (MapView) findViewById(R.id.editarMapa);

     /********************
     * Obtengo los datos del item, con intent procedente 
     * de otro activity   y tambien digo que tipo de accion es: Crear o Editar     
     *********************/

      final Bundle extras = getIntent().getExtras();
       String nombreClick = null;          


      if(extras!=null){
                 nombreClick = extras.getString("nombre");
                 estoyEditando(nombreClick,eNombre,eDesc,eFoto);
             }else{
                 //Estoy creando

             }


    /********************************************************************************** 
     * Instanciamos el mapa de google
     * Le ponemos controles de zoom
     **********************************************************************************/

   eMapa.setBuiltInZoomControls(true);
   eMapa.displayZoomControls(true);
   eMapa.setClickable(true);
   controladorMapa = eMapa.getController();  
   situame();
   eFoto.setOnClickListener(imagenClick);


}


/*****************************************************************************************************************************************  
  * 
  *     FUERA DE ONCREATE
  *     
  *     
  *******************************************************************************************************************************************/

 /****************
 * 
 * METODO PUENTE PARA GEOPOSICIONARME
 * 
 ****************/




  private void situame() {
        if(myLocationOverlay == null){
            myLocationOverlay = new MyLocationOverlay(this, eMapa);
            myLocationOverlay.runOnFirstFix(new Runnable() {
                public void run() {
                    myLocationOverlay.enableMyLocation();
                    controladorMapa().animateTo(myLocationOverlay.getMyLocation());
                    yo=myLocationOverlay.getMyLocation();
                }
            });
            mapOverlays().add(myLocationOverlay);
        }

    }

    private MapController controladorMapa(){
        return eMapa.getController();
    }

    private void animateTo(GeoPoint point) {
        controladorMapa().animateTo(point);
    }

    // Lista de capas que maneja el mapa
    protected List<Overlay> mapOverlays() {
        return eMapa.getOverlays();
    }




/************************************
 * Metodo para rellenar los campos de los views a partir de una busqueda
 * en la BBDD de un dato ya existente 
 * 
 * @param nombreClick Nombre del string para generar la busqueda
 * @param eNombre Nombre del textview del campo buscar
 * @param eDesc Nombre del textview del campo descripcion
 * @param eFoto Nombre dle imageView del campo foto
 */
private void estoyEditando(String nombreClick, TextView eNombre, TextView eDesc, ImageView eFoto) {


         estado = 2;//Estoy editando
         ayudabbdd.getLugarPorNombre(nombreClick);
         ArrayList<Object> datosLugar = ayudabbdd.getLugarPorNombre(nombreClick);

        //Paso los datos de array a las variables
        String nombre = nombreClick;
        String descripcion = (String) datosLugar.get(3).toString();
        String foto = (String)datosLugar.get(4).toString();

        //Los seteo
        eNombre.setText(nombre);
        eDesc.setText(descripcion);


        //Creo un objeto de tipo file, si existe genero la imageneo
        archivoImagen = new File(foto);             
        ayudabbdd.close();

}


/************************
 * Metodo obligatorio
 * 
 **********************/

@Override
protected boolean isRouteDisplayed() {
    return false;
}



 /**************************
 * 
 * Gestion boton menu
 * 
 *************************/ 

public boolean onCreateOptionsMenu(Menu menu) {
    if(estado==1){
    menu.add(Menu.NONE, 1, Menu.NONE, "Crear").setIcon(R.drawable.ic_menu_tick);
    menu.add(Menu.NONE, 2, Menu.NONE, "Cancelar").setIcon(R.drawable.ic_menu_stop);
    return true;
    }else{
        menu.add(Menu.NONE, 3, Menu.NONE, "Guardar").setIcon(R.drawable.ic_menu_tick);
        menu.add(Menu.NONE, 4, Menu.NONE, "Eliminar").setIcon(R.drawable.ic_menu_stop);
        return true;
    }
}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case 1:
            Crear(eNombre.getText().toString(),eDesc.getText().toString(),latitud,longitud,imageUri.toString());
        default:
            return super.onOptionsItemSelected(item);
    }
}


     /****************************
     * Funciones de la BBDD
     *   Crear
     *   Vuelve Atras
     *   Guardar
     *   Eliminar
     *********************/     



    public void Crear(String nuevoNombre,String nuevoDesc, double nuevoLat, double nuevoLong, String nuevoFoto){

        ayudabbdd = new DataBaseHelper(this);
        try{
        ayudabbdd.addLugar(nuevoNombre, nuevoDesc, nuevoLat, nuevoLong, nuevoFoto);
        }catch(Exception e)
        {
            Log.e("Error!", e.getMessage());

        }
        ayudabbdd.close();              

    }




  private OnClickListener imagenClick = new OnClickListener()
{
    public void onClick(View v) {

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Selecciona una imagen"),1);

        }   

    };


public void onActivityResult(int requestCode, int resultCode, Intent data) { 

        if (resultCode == RESULT_OK) {

                if (requestCode == 1) {


                         imageUri = data.getData();
                         eFoto.setImageURI(imageUri);

                }
        }
}

public String obtenerPath(Uri contentUri) {

        String [] proj={MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery( contentUri,proj,null,null,null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();

        return cursor.getString(column_index);

}

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

public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
}

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

@Override
public void onLocationChanged(Location location) {
    if (location != null) {
        int lat = (int) (location.getLatitude() * 1E6);
        int lon = (int) (location.getLongitude() * 1E6);
        GeoPoint yo = new GeoPoint(lat, lon);
        animateTo(yo);
    }
}

}

4

2 回答 2

2

来自谷歌代码:

获取我的位置

公共地理点 getMyLocation()

Returns a GeoPoint corresponding to the most-recently-set user location.

Returns:
    The GeoPoint, or null if none has been set.

可能还没有设置,所以你必须等到它设置好...

于 2011-12-09T20:38:03.400 回答
0

希望这对你们有帮助...

 myLocationOverlay.runOnFirstFix(new Runnable() {
        public void run() {
            //Todo
        }
 });
于 2015-11-26T05:30:44.620 回答