实时将数据从应用程序发送到REST Web服务

时间:2018-07-27 13:08:44

标签: android rest

我正在构建一个Android应用程序,该应用程序从设备获取更多数据并在服务器上实时发送此数据(这是目的)。

这是Android应用程序的代码:

此方法分配一些值,并生成一个名为dataFiltered的Double值。 因此,调用ECGUpdater.sendUpdate,此方法应直接在服务器上发送此数据。

public void run() {
        try {
            while (this.dataConsumerAlive) {

                // -- ECG
                if(!this.ecgQueue.isEmpty()) {
                    //CODE TO GENERATE A DOUBLE VALUE
                    //TODO IN QUESTA PARTE, DEVO INVIARE I DATI AL SERVER
                    ECGUpdater.sendUpdate(null, dataFiltered);
                }
                }
            }
        } catch (Exception e) {
            Log.d(TAG, e.toString());
            Log.d(TAG, "Error from General Data Manager thread");
        }
    }

这是ECGUpdater类:

public class ECGUpdater {

    private static final String TAG = ECGUpdater.class.getSimpleName();
    public static SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault());


    public static void sendUpdate(final Context context, final Double ecg) {
        new UpdaterAsyncTask(context, ecg).execute();
    }

    private static class UpdaterAsyncTask extends AsyncTask<Void, Void, Void> {
        private final Double ecg;

        UpdaterAsyncTask(final Context context, final Double ecg) {
           this.ecg = ecg;
        }


        @Override
        protected Void doInBackground(Void... voids) {
            WebService webService = WebServiceHandler.getService();
            JsonObject body = WebServiceHandler.getDefaultBody();

            body.addProperty(WebServiceHandler.ECG_VALUE, this.ecg);
            body.addProperty(WebServiceHandler.TIMESTAMP, dateFormat.format(new Date()));

                       //maintain operation result, if failed add the current diet as unsynced records
            boolean error = true;
            try {
                Call<BaseMessage<JsonElement>> request = webService.insertECG(body);
                Log.d(TAG, body.toString());
                Response<BaseMessage<JsonElement>> response = request.execute();
                request.toString();
                if (response.isSuccessful()) {
            //TODO
                } else {
            //TODO
                }
            } catch (Exception ex) {
                Log.e(TAG, "updateDiet call", ex);
            } finally {

                if (error) {
                    Log.e(TAG, "ERROR SYNC WS");
                }
            }

            return null;
        }
    }
}

现在的问题是这个。代码ECGUpdater.sendUpdate(null,dataFiltered);在第二次执行多次,直到执行周期时才调用sendUpdate方法,但未执行,当我停止该线程时,ECGUpdater类的方法“ doInBackground”被执行了很多次。

如何修改此代码执行,并在调用ECGUpdater.sendUpdate时也调用方法doInBackbround?

0 个答案:

没有答案