Osmdroid覆盖崩溃应用程序Android

问题描述

|
package gpstest.example.com;



import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.views.overlay.MyLocationOverlay;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import android.content.Context;
import android.graphics.Paint;
import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;




public class gpstestActivity extends Activity

{
    public LocationManager mlocManager;
    public LocationListener mlocListener;
    public boolean isFirstRun=true;
    protected final Paint mPaint = new Paint();
    private MapView myMap;
    private MyLocationOverlay myLocOverlay;




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






public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);


setContentView(R.layout.main);

gpsEnable();
setMap();
initMyLocation();


}




public void setMap(){
    MapView map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);

    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);
    map.getController().setZoom(16);
    map.getController().setCenter(new GeoPoint(30266000,-97739000));

}

private void initMyLocation() {
    myLocOverlay = new MyLocationOverlay(this,myMap);
    myLocOverlay.enableMyLocation();
    myMap.getoverlays().add(myLocOverlay);

}



public void gpsEnable (){
    mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    mlocListener = new MyLocationListener();

    mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER,10,50,mlocListener);
}

public void gpsdisable(){
    mlocManager.removeUpdates(mlocListener);}


/* Class My Location Listener */

public class MyLocationListener implements LocationListener

{

@Override

public void onLocationChanged(Location loc)

{

loc.getLatitude();

loc.getLongitude();
double longi=loc.getLongitude();
double lati=loc.getLatitude();
MapView map = (MapView) findViewById(R.id.map);
map.getController().setCenter(new GeoPoint(lati,longi));

String Text=\"My current location is: \" +

\"Latitud = \" + loc.getLatitude() +

\"Longitud = \" + loc.getLongitude();

Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_SHORT).show();
//initMyLocation();

}

@Override

public void onProviderdisabled(String provider)

{

Toast.makeText( getApplicationContext(),\"Gps disabled\",Toast.LENGTH_SHORT ).show();
mlocManager.removeUpdates(mlocListener);
}


@Override

public void onProviderEnabled(String provider)

{

Toast.makeText( getApplicationContext(),\"Gps Enabled\",Toast.LENGTH_SHORT).show();

}

@Override

public void onStatusChanged(String provider,int status,Bundle extras)

{
    Toast.makeText( getApplicationContext(),\"Status changed\",Toast.LENGTH_SHORT).show();

}
}/* End of Class MyLocationListener */





@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu,menu);
    return true;

}
@Override
public boolean onoptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.beenden:  mlocManager.removeUpdates(mlocListener);}


        return true;
    }




protected void onPause(){
    Toast.makeText( getApplicationContext(),\"On Pause\",Toast.LENGTH_SHORT).show();
    gpsdisable();
    isFirstRun=false;

    super.onPause();

}

protected void onDestroy(){
    Toast.makeText( getApplicationContext(),\"Destroyed\",Toast.LENGTH_SHORT).show();
    gpsdisable();
    super.onDestroy();

}

protected void onResume(){
    if (isFirstRun==false){gpsEnable();}
    Toast.makeText( getApplicationContext(),\"Resumed\",Toast.LENGTH_SHORT).show();

    super.onResume();
}







}/* Ende Activity */
每当我调用initMyLocation时,应用程序就会崩溃(模拟器和设备上的机器人)。当我尝试实现MiniMap时也会发生同样的情况。我所做的工作与Osmdroid存储库中的SampleExtensive示例完全相同。我究竟做错了什么? 我的AndroidManifest.xml提供了我认为的所有必需权限
<?xml version=\"1.0\" encoding=\"utf-8\"?>
    
<application android:icon=\"@drawable/icon\" android:label=\"@string/app_name\">
    <activity android:name=\".gpstestActivity\"
              android:label=\"@string/app_name\">
        <intent-filter>
            <action android:name=\"android.intent.action.MAIN\" />
            <category android:name=\"android.intent.category.LAUNCHER\" />
        </intent-filter>
    </activity>

</application>
<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"></uses-permission>
<uses-permission android:name=\"android.permission.INTERNET\"></uses-permission>  
<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/> 
<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>
<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />
<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />
<uses-permission android:name=\"android.permission.INTERNET\" />
<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />
    

解决方法

        在您的setMap()中,您从未设置 myMap =地图; 因此,在initMyLocation中,将为pMapView参数传递null。     ,        要使用位置,您必须在AndroidManifest.xml中包含以下内容:
<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"></uses-permission>
<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"></uses-permission>
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...