我正在构建一个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?