0

与えられたコードのように多くのジオポイント間に直線パスを描きたいのですが.....マップをズームインしようとするとConcurrentModificationExceptionが発生し、plzが助けてくれます....私はAndroidにとって非常に新しいです.....

//this is the methode to draw path
 public void draw_path(View view) {
     if(timer!=null)
         timer.cancel();

      timerpath = new Timer();
      timerpath.scheduleAtFixedRate(new TimerTask(){
          int i=0;
        @Override
        public void run() {
            // TODO Auto-generated method stub
             List<Overlay> mapOverlays = mapView.getOverlays();

             if(i<replaydata.length-2){
                 GeoPoint point=new GeoPoint((int) (Float.parseFloat(replaydata[i].split("~")[0]) * 1E6),(int) (Float.parseFloat(replaydata[i].split("~")[1])* 1E6));
                 GeoPoint point2=new GeoPoint((int) (Float.parseFloat(replaydata[i+1].split("~")[0]) * 1E6),(int) (Float.parseFloat(replaydata[i+1].split("~")[1])* 1E6));

                 mapOverlays.add(new PathOverlay(point2, point));
                 mapView.postInvalidate();
                 i=i+1;
             }
             }


        }, 50, 500);

    }
//this is the PathOverlay Class
package com.suneeltectonics.tracking;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;
public class PathOverlay extends Overlay {
private GeoPoint gp1;
private GeoPoint gp2;

public PathOverlay(GeoPoint gp1, GeoPoint gp2) {
    this.gp1 = gp1;
    this.gp2 = gp2;
}

@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
        long when) {
    // TODO Auto-generated method stub
    Projection projection = mapView.getProjection();
    if (shadow == false) {

        Paint paint = new Paint();
        paint.setAntiAlias(true);
        Point point = new Point();
        projection.toPixels(gp1, point);
        paint.setColor(Color.RED);
        Point point2 = new Point();
        projection.toPixels(gp2, point2);
        paint.setStrokeWidth(6);
        canvas.drawLine((float) point.x, (float) point.y, (float) point2.x,
                (float) point2.y, paint);
    }
    return super.draw(canvas, mapView, shadow, when);
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    // TODO Auto-generated method stub

    super.draw(canvas, mapView, shadow);
}

}
 //this is the crash log
 07-26 17:42:30.850: WARN/dalvikvm(2173): threadid=1: thread exiting with uncaught exception (group=0x400207d8)
 07-26 17:42:30.870: ERROR/AndroidRuntime(2173): FATAL EXCEPTION: main
 07-26 17:42:30.870: ERROR/AndroidRuntime(2173): java.util.ConcurrentModificationException
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
 07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:44)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at com.google.android.maps.MapView.onDraw(MapView.java:494)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.View.draw(View.java:6740)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.View.draw(View.java:6743)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
07-26 17:42:30.870: ERROR/AndroidRuntime(2173):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)

07-26 17:42:30.870:ERROR / AndroidRuntime(2173):android.view.ViewGroup.drawChild(ViewGroup.java:1638)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):androidでview.ViewGroup.dispatchDraw(ViewGroup.java:1367)07-26 17:42:30.870:エラー/ AndroidRuntime(2173):android.view.View.draw(View.java:6743)07-26 17:42: 30.870:ERROR / AndroidRuntime(2173):android.widget.FrameLayout.draw(FrameLayout.java:352)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):com.android.internal.policy.impl .PhoneWindow $ DecorView.draw(PhoneWindow.java:1842)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):at android.view.ViewRoot.draw(ViewRoot.java:1407)07-26 17:42 :30.870:ERROR / AndroidRuntime(2173):android.view.ViewRoot.performTraversals(ViewRoot.java:1163)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):at android.os.Handler.dispatchMessage(Handler.java:99)07-26 17 :42:30.870:ERROR / AndroidRuntime(2173):android.os.Looper.loop(Looper.java:123)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):android.app.ActivityThread main(ActivityThread.java:4633)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):at java.lang.reflect.Method.invokeNative(Native Method)07-26 17:42:30.870:ERROR / AndroidRuntime (2173):java.lang.reflect.Method.invoke(Method.java:521)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):com.android.internal.os.ZygoteInit$MethodAndArgsCallerで。 run(ZygoteInit.java:891)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):com.android.internal.os.ZygoteInit.main(ZygoteInit。java:649)07-26 17:42:30.870:ERROR / AndroidRuntime(2173):at dalvik.system.NativeStart.main(Native Method)07-26 17:42:30.920:WARN / ActivityManager(150):強制終了アクティビティcom.suneeltectonics.tracking/.ViewReplay

4

1 に答える 1

0

リスト項目の操作により例外が発生しています...

ondraw メソッドが原因ではなく、すべてのクロック サイクルでリスト全体を操作しているためです。そのため、クロック サイクルが小さい場合は例外が発生しますが、大きい場合は何も取得されません。

常に再入力して変更しようとしないでください...すべてを再描画できるようにメソッド無効化がありますが、非常に短いトリマー期間を維持しているため、値の競合が発生しています...

于 2012-07-26T13:53:43.880 に答える