1

私は、その特定のlocationごとにデータベースに保存する必要があるアプリケーションに取り組んでいます。1 minutedevice/user

アプリケーションが開いている間にユーザーが移動している場合、その座標は毎回データベースに挿入され続けるはず1 minuteです。そのため、MySql データベースにデータを挿入できる Web サービスをセットアップしました。挿入部分で WebService をテストしましたが、正常に動作します。

しかし、私が抱えている問題は、その特定のデバイス/ユーザーのMySqlデータベースに1 minute. なぜそれが毎回起こっていないのか誰にも教えてもらえます1 minuteか? 以下のコードに問題がある場合は、上記のシナリオに従って機能する例を提供して、誰かが私を助けてくれますか?

どんな考えでも大いに役立ちます。

private final String id = UUID.randomUUID().toString();
private final String sampleURL = ServerInfo.getServiceURL() + "/insert";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);    

    locationListener = new GPSLocationListener();

    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            60000, 
             0, 
            this.locationListener);

}

以下は、 を実装するクラスですLocationListener

private class GPSLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            GeoPoint point = new GeoPoint(
                    (int) (location.getLatitude() * 1E6), 
                    (int) (location.getLongitude() * 1E6));
                }
     // Below code is used to insert into database
            String userId = id;
            String mLatitude = Double.toString(location.getLatitude());
            String mLongitude = Double.toString(location.getLongitude());
            String mProvider = location.getProvider();
            String mHasAltitude = Boolean.toString(location.hasAltitude());
            String mAltitude = Double.toString(location.getAltitude());
            String mHasSpeed = Boolean.toString(location.hasSpeed());
            String mSpeed = Float.toString(location.getSpeed());
            String mHasBearing = Boolean.toString(location.hasBearing());
            String mBearing = Float.toString(location.getBearing());
            String mHasAccuracy = Boolean.toString(location.hasAccuracy());
            String mAccuracy = Float.toString(location.getAccuracy());

            WebServiceTask wst = new WebServiceTask(WebServiceTask.POST_TASK,
                    getApplicationContext(), "Posting data...");

            wst.addNameValuePair("user_id", userId);
            wst.addNameValuePair("mlatitude", mLatitude);
            wst.addNameValuePair("mlogitude", mLongitude);
            wst.addNameValuePair("mprovider", mProvider);
            wst.addNameValuePair("mhasAltitude", mHasAltitude);
            wst.addNameValuePair("mAltitude", mAltitude);
            wst.addNameValuePair("mhasspeed", mHasSpeed);
            wst.addNameValuePair("mspeed", mSpeed);
            wst.addNameValuePair("mhasbearing", mHasBearing);
            wst.addNameValuePair("mbearing", mBearing);
            wst.addNameValuePair("mhasaccuracy", mHasAccuracy);
            wst.addNameValuePair("maccuracy", mAccuracy);

            // This will insert into database
            wst.execute(new String[] { sampleURL });


    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
}

注:- データベースに挿入していますが、必要な時間間隔で正確またはほぼ挿入していません。1 minute

4

1 に答える 1

1

この問題は、プログラマーが直接制御できないいくつかの問題が原因である可能性があります。いくつか頭に浮かぶのは

  1. ネットワークが利用できない可能性があるため、測位データをアプリに送信できません。

  2. 動作の悪いアプリが CPU 時間を占有しており、OS が目的の時間間隔内にアプリを中断しません。

一般に、マルチタスク用に設計されたデバイスで正確なタイミングを取得することはほとんど不可能です。許容できる誤差の範囲によっては、「おおよその」時間間隔でデータを取得する際にも問題が発生する可能性があります。

于 2013-01-13T23:37:58.640 に答える