它继续为我和模拟器获取此错误它显示强制关闭。没有得到它出错的地方。实际上我正在创建一个程序(参考一本书)来获取位置数据。以下是我的程序和logcat错误。我提到了这些link1,link2,但我找不到那些解决方案。有人可以建议我是什么问题?即使我已经在清单中添加了这个
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
并在应用程序标记中
<uses-library android:name="com.google.android.maps"/>
这是我的.java文件
public class LBSMap extends MapActivity {
MapView mapView;
MapController mc;
GeoPoint p;
LocationManager lm;
LocationListener locationListener;
private class MapOverlay extends com.google.android.maps.Overlay
{
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
Point screenPts=new Point();
mapView.getProjection().toPixels(p, screenPts);
Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50,null);
return true;
}
public boolean onTouchEvent(MotionEvent event,MapView mapView)
{
if(event.getAction()==1)
{
GeoPoint p=mapView.getProjection().fromPixels((int)event.getX(),(int)event.getY());
Geocoder geoCoder=new Geocoder(getBaseContext(),Locale.getDefault());
try{
List<Address> addresses=geoCoder.getFromLocation(p.getLatitudeE6()/1E6, p.getLongitudeE6()/1E6, 1);
String add="";
if(addresses.size()>0)
{
for(int i=0;i<addresses.get(0).getMaxAddressLineIndex();i++)
add +=addresses.get(0).getAddressLine(i) + "\n";
}
Toast.makeText(getBaseContext(),add,Toast.LENGTH_SHORT).show();
}catch(IOException e){
e.printStackTrace();
}
return true;
}
return false;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lbsmap);
mapView=(MapView)findViewById(R.id.mapView);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mapView.setTraffic(true);
mc=mapView.getController();
Geocoder geoCoder=new Geocoder(this,Locale.getDefault());
try{
List<Address> addresses=geoCoder.getFromLocation(p.getLatitudeE6()/1E6, p.getLongitudeE6()/1E6, 1); //line 103
String add="";
if(addresses.size()>0)
{
for(int i=0;i<addresses.get(0).getMaxAddressLineIndex();i++)
add +=addresses.get(0).getAddressLine(i) + "\n";
}
Toast.makeText(getBaseContext(),add,Toast.LENGTH_SHORT).show();
}catch(IOException e){
e.printStackTrace();
}
MapOverlay mapOverlay=new MapOverlay();
List<Overlay> listOfOverlays=mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationListener = new MyLocationListener();
}
public void onResume()
{
super.onResume();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
public void onPause()
{
super.onPause();
lm.removeUpdates(locationListener);
}
private class MyLocationListener implements LocationListener
{
public void onLocationChanged(Location loc)
{
if(loc!=null){
Toast.makeText(getBaseContext(), "Location changed : Lat: "+loc.getLatitude()+ "Lng: "+loc.getLongitude(), Toast.LENGTH_SHORT).show();
p=new GeoPoint((int)(loc.getLatitude()*1E6),(int)(loc.getLongitude()*1E6));
mc.animateTo(p);
mc.setZoom(18);
}
}
public void onProviderDisabled(String provider)
{}
public void onProviderEnabled(String provider)
{}
public void onStatusChanged(String provider, int status, Bundle extras)
{}
}
@Override
public boolean isRouteDisplayed()
{
return false;
}
}
以下是logcat的截图。
答案 0 :(得分:0)
我猜你GeoPoint p
中的onCreate()
为空,就像你在叠加代码中为它指定一个值一样,你使用
GeoPoint p=mapView.getProjection().fromPixels((int)event.getX(),(int)event.getY());
这会创建另一个局部变量,而不是使用全局变量。尝试使用:
p=mapView.getProjection().fromPixels((int)event.getX(),(int)event.getY());
您可能需要在声明中添加final
修饰符,以使其在另一个类中工作。
答案 1 :(得分:0)
请检查您是否拥有SDK版本的互联网访问代码&gt; 9
// Allow network access
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}