MapActivity - ширина и высота должны быть> 0 - PullRequest
0 голосов
/ 03 марта 2012

Я создал приложение, используя mapActivity и MapView, и обнаружил странное сообщение:
"E / AndroidRuntime (4276): java.lang.IllegalArgumentException: ширина и высота должны быть> 0"

это сообщение не всегда отображается. Я проследил ситуацию, в которой он обнаружился, и обнаружил следующее:

1) Если прошло много времени с тех пор, как я коснулся приложения, а затем запустил его, появится сообщение о сбое, обратите внимание, что если после сбоя я снова открою приложение, то снова произойдет NO .

2) если я удалю память (RAM), то после запуска приложения произойдет сбой.

3) если я запускаю режим дибуга, я никогда не сталкиваюсь с крахом ...

с моей точки зрения, я думаю, что авария связана с чем-то, что Android еще не испортил, но все еще пытается его отобразить. Тем не менее, я не касаюсь параметров неправильного просмотра карты, так почему я должен когда-либо получать этот сбой? В любом случае, я понятия не имею, что делать, так как режим отладки здесь не поможет. я буду отображать мой onCreate () здесь:

/********************************  Methods  *****************************************
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);  //get rid of the title bar of the window, NOTE: we have to do this BEFORE we call "setContentView()"
    //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);  //this line is use to remove the uppermost bar in the window (the one with the time , etc.)

    setContentView(R.layout.create_map);
    mMapView = (MapView)findViewById(R.id.mapview);
    moveDotBtn = (Button)findViewById(R.id.movedot);
    finishBuildBtn = (Button)findViewById(R.id.finish);

    mapController = mMapView.getController();
    mMapOverlays = mMapView.getOverlays();
    mMapView.setBuiltInZoomControls(true);
    mMapView.setSatellite(false);
    mMapView.setStreetView(false);

    whereAmI = new MyCustomLocationOverlay(this, mMapView,mapController);
    mMapView.getOverlays().add(whereAmI);
    //mMapView.postInvalidate();    //without that call the overlay "where_m_i" will not show.

    sensor_mgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //activate for compass
    sensor = sensor_mgr.getDefaultSensor(Sensor.TYPE_ORIENTATION); //activate for compass, and orientation

    powerManager =(PowerManager)getSystemService(Context.POWER_SERVICE);    //to make always on, and never looked
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");

    locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    lastLocation = null;


    Touchy t = new Touchy();
    mMapOverlays.add(t);

    iconItems = getResources().getStringArray(R.array.icons);
    RES = getResources();
    mIconOverlays = new IconItemizedOverlay(RES.getDrawable(R.drawable.ic_bench));
    mMapOverlays.add(mIconOverlays);

    mapController.setZoom(17);
}

@Override
public void onResume()
{
    wakeLock.acquire(); //make your phone awake at all times.

    locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0 , whereAmI);
    locMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0 , whereAmI);
    whereAmI.enableMyLocation();
    whereAmI.enableCompass();
    findLastKnownLocation();
    sensor_mgr.registerListener(sensorEventListener , sensor ,SensorManager.SENSOR_DELAY_NORMAL);
    super.onResume();
}

Ответы [ 2 ]

0 голосов
/ 19 августа 2013

Вы должны внести свои изменения в onWindowFocusChanged, так как перед этим вам не выделена высота / ширина экрана.

 @Override
   public void onWindowFocusChanged(boolean hasFocus) {
      if (hasFocus) {
             setOverlay(); //Your code should come here
         }
      }
      super.onWindowFocusChanged(hasFocus);
   }
0 голосов
/ 04 марта 2012

я думаю, что получил ответ, но я не уверен, только время может сказать с ошибками как те.кажется, что я не должен касаться экрана на onCreate при использовании карт Google, поэтому, если я хочу сделать ZoomIn или setZoom (SOME_NUMBER), то я должен сделать это на onResume (), а не onCreate.надеюсь, что это кому-нибудь когда-нибудь поможет :) кстати: если у кого-то есть идея, если это действительно проблема или это просто временное решение, то я хотел бы услышать, потому что, похоже, оно отлично работает с моим решением:)

...