私はArrayList()
にリアルタイムで生成されたいくつかのデータを保存しています。 ----------------ArrayList内の2つの連続する値の違い:Android
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;
}
これを試してみましたArrayList
の連続した要素の違いを取得したいですまた
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));
しかし、それらのうちの2つの連続した要素の間で減算された値が得られないようです。おそらく問題は、リアルタイムで値が生成されていることです。これを減算すると、次の値はまだ生成されていません。 どうすればいいですか?
UPDATE:方法(それが役立つ場合)
@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));
}
何もlogcatに示していません。おそらくforループ内のログ関数を呼び出すことができないからです。それは数回前に私に起こった。 – Mill3r
@ Mill3r、いつループ内でログを印刷できないのですか?これは私には新しく、サンプルコードで動作します。 –
申し訳ありませんが私は間違っているかもしれません。 私の場合、本当の問題が見つかりました。私はリアルタイムで 'onPrevieFrame'から画像処理データを取得しているので、毎回フレームごとに1セットのデータを送信します。私は 'yAverage.size()'をログアウトし、サイズが常に1のままであることを発見しました。したがって、ループ内でインデックスiとi + 1の差を見つけようとすると、最初にi + 1が存在しないため、エラーが発生します。 助けてくれてありがとう。 – Mill3r