0

私は Android の初心者で、アプリに Google Maps Android API v2 を使用していますが、問題があります。サーバーから位置 (緯度、経度) を取得しました。私の作品は、マップ上のこの位置にマーカーを設定し、更新マーカーの位置を自動的に維持します (例: 1 更新/分)。サーバーから位置を取得してマーカーを正確に表示できますが、無限ループによる自動更新はできません。ボタンを使用してマーカーを自動更新し、別のボタンを使用して停止するにはどうすればよいですか? ここで私のコードはサーバーからデータを取得し (JSON を使用)、マーカーを設定します。

iv_search.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            markers = new ArrayList<Marker>();
            listTaxi = new ArrayList<Get1Comp>();
            googleMap.clear();
            count = 1;
            txt_search = et_search.getText().toString();
            find_url = "http://192.111.124.80:8001/Default.aspx?username=" 
                        + Id + "&password=" + Pass + "&comp="+txt_search;
            new AsynComp().execute();
            getCurrentFocus().clearFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(et_search.getWindowToken(), 0);
        }
    });


public class AsynComp extends AsyncTask<Void, Void, Void> {
    ProgressDialog taxiDialog;

    @Override
    protected Void doInBackground(Void... params) {
        jsonComp = new JSONComp(find_url);
        find_status = jsonComp.getJsonStatus(txt_search);
        return null;
    } 

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        if (find_status.equals("2013")) {
            Toast.makeText(getBaseContext(), "No resutl",
                    Toast.LENGTH_SHORT).show();

        } else if (find_status.equals("2012")) {
            for (int i=0; i<count;i++){
                listCom.add(new Get1Comp(jsonComp.getJsondata(i)));
                SetMarkerComp(listComp.get(i));
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }   
}

private void SetMarkerComp (Get1Comp get1Comp){
    LatLng target = new LatLng( Double.parseDouble(get1Comp.getLat()),
                                Double.parseDouble(get1Comp.getLng()));
    String compStt = get1Comp.getStt();
    String compNav = get1Comp.getNav();
    if (compStt.equals("0")) compStt = "b";
    else if (compStt.equals("1")) compStt = "y";
    else if (compStt.equals("2")) compStt = "r";
    else if (compStt.equals("3")) compStt = "w";
    Marker marker = googleMap.addMarker(new MarkerOptions() .position(target)
                                            .icon(BitmapDescriptorFactory.fromResource(getIconComp(compStt, compNav)))
                                            .title(get1Comp.getNo()));
    marker.showInfoWindow();
    setCamPosition(target);
    markers.add(marker);
}
4

3 に答える 3

1

こんにちは、このコードを使用しています

Handler locationHandler;
final static long REFRESH = 10 * 1000;
final static int SUBJECT = 0;
private GoogleMap mMap;
private Marker myMarker = null;

そして作成を追加

locationHandler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == SUBJECT) {
                updateMarker();
                this.sendEmptyMessageDelayed(SUBJECT, REFRESH);
            }
        }
    };
于 2013-09-21T11:11:47.190 に答える
1

関数を作成してこれを試すことができます

public void callAsyncTask(){
    final Handler handler = new Handler();
    timer = new Timer();
    TimerTask doAsyncTask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    try{

                     // put your code here   
                     new AsynComp().execute();

                    }catch (Exception e){


                    }

                }
            });
        }
    };

    timer.schedule(doAsyncTask,0,10000);

}

この関数を onCreate() で呼び出すと、new AsynComp().execute(); のままにすることもできます。現在の電流でも。ユーザーが自動ではなく強制的に更新できるように、

于 2015-01-28T10:19:12.097 に答える
0

for と loop を使用できます。

for(int i = 0; i <= 1000; i++){
 //code here 
}
于 2013-09-21T11:10:37.983 に答える