J'ai un ArrayList()
qui stocke certaines données générées en temps réel. Je veux obtenir la différence de l'élément consécutif de la ArrayList
différence de deux valeurs consécutives dans une ArrayList: Android
J'ai essayé
ArrayList<Long> difference = new ArrayList<>(); difference.add(durationInMs); //tried to store for (int d = 0; d < difference.size()-1; d++){ time1 = difference.get(d); time2 = difference.get(d + 1); timeDifference = time2 - time1; }
Ce:
----------------ArrayList<Long> difference = new ArrayList<>(); difference.add(durationInMs); ArrayList<Long> tempArray = new ArrayList<>(); tempArray.add(0, difference.get(0)); for (int d = 0; d < difference.size()-1; d++){ timeDifference = tempArray.get(d+1) - difference.get(d); } Log.d("time", String.valueOf(timeDifference));
De plus, cette enter link description here
Mais aucun d'entre eux ne semble m'obtenir la valeur soustraite entre 2 éléments consécutifs. Probablement le problème est que les valeurs sont générées en temps réel et que lors de la soustraction, la valeur suivante n'est pas encore générée. Comment est-ce que je fais?
UPDATE: la méthode (si elle contribue)
@Override
public void onPreviewFrame(long startTime, int ySum, int uSum, int vSum, long endTime) {
begin = startTime;
img_Y_Avg = ySum;
img_U_Avg = uSum;
img_V_Avg = vSum;
end = endTime;
//set value of Y on the text view
TextView valueOfY = (TextView)findViewById(R.id.valueY);
//valueY = img_Y_Avg;
valueOfY.setText(Double.toString(img_Y_Avg));
//set value of U on the text view
TextView valueOfU = (TextView)findViewById(R.id.valueU);
// valueU = img_U_Avg;
valueOfU.setText(Double.toString(img_U_Avg));
//set value of V on the text view
TextView valueOfV = (TextView)findViewById(R.id.valueV);
//valueV = img_V_Avg;
valueOfV.setText(Double.toString(img_V_Avg));
//start time in milliseconds
long StartDurationInMs = TimeUnit.MILLISECONDS.convert(begin, TimeUnit.MILLISECONDS);
ArrayList<Long> startOfTime = new ArrayList<>();
startOfTime.add(StartDurationInMs);
Log.d("time", "start: "+String.valueOf(startOfTime));
//store value to array list
ArrayList<Integer> yAverage = new ArrayList<>();
yAverage.add(img_Y_Avg);
//Log.d("MyEntryData", String.valueOf(yAverage));
//store u values to array
ArrayList<Integer> uAverage = new ArrayList<>();
uAverage.add(img_U_Avg);
//Log.d("MyEntryData", String.valueOf(uAverage));
//store u values to array
ArrayList<Integer> vAverage = new ArrayList<>();
vAverage.add(img_V_Avg);
//Log.d("MyEntryData", String.valueOf(vAverage));
//time between frames
//end time in milliseconds
long EndDurationInMs = TimeUnit.MILLISECONDS.convert(end, TimeUnit.MILLISECONDS);
ArrayList<Long> endOfTime = new ArrayList<>();
endOfTime.add(EndDurationInMs);
Log.d("time", "end: "+String.valueOf(endOfTime));
ArrayList<Long> getValues = new ArrayList<>();
for(int i = 0; i < yAverage.size(); i++) {
getValues.add(startOfTime.get(i));
getValues.add((long)(yAverage.get(i)));
getValues.add((long)(uAverage.get(i)));
getValues.add((long)(vAverage.get(i)));
}
String filename = new SimpleDateFormat("yyyyMMddHHmm'.csv'").format(new Date());
File directoryDownload = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File logDir = new File (directoryDownload, "bpReader"); //Creates a new folder in DOWNLOAD directory
logDir.mkdirs();
File file = new File(logDir, filename);
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file, true);
//outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
for (int i = 0; i < yAverage.size(); i += 4) {
outputStream.write((getValues.get(i) + ",").getBytes());
outputStream.write((getValues.get(i + 1) + ",").getBytes());
outputStream.write((getValues.get(i + 2) + ",").getBytes());
outputStream.write((getValues.get(i + 3) + "\n").getBytes());
}
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Log.d("MyEntryData", String.valueOf(getValues));
handler = new Handler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
readingRemaining = readingRemaining -1;
if (readingRemaining > 0){
plotGraph(img_Y_Avg);
}
}
};
handler.postDelayed(runnable, 100);
//Log.d("MyEntryData", String.valueOf(img_Y_Avg +" "+ img_U_Avg+" "+img_V_Avg));
}
rien ne montre dans logcat. probablement parce que ne peut pas appeler une fonction de journal à l'intérieur d'une boucle for. cela m'est arrivé plusieurs fois plus tôt. – Mill3r
@ Mill3r, depuis quand ne pouvez-vous imprimer Connectez-vous dans une boucle. C'est nouveau pour moi et cela fonctionne avec le code d'exemple. –
Je suis désolé peut-être que je me trompe. J'ai trouvé le vrai problème dans mon cas. Comme j'obtiens en temps réel les données de traitement d'image de 'onPrevieFrame', il n'envoie qu'un jeu de données à chaque fois pour chaque image. Je me suis déconnecté du 'yAverage.size()' et j'ai trouvé que la taille reste toujours 1. elle n'augmente pas. Par conséquent, lorsque j'essaie de trouver la différence entre les index «i» et «i + 1» dans la boucle, je reçois une erreur, car il n'y a pas de «i + 1» pour commencer. je vous remercie pour votre aide .. – Mill3r