#. 일단 LineGraph의 onClick 부분만 좀 뜯어 고쳐 봤습니다. 기존의 if문을 SQL의 WHERE절로 바꿨습니다.
#. 나머지 case부분은 둘 다 같은 내용 같아 보여서 그냥 합체.
#. 스레드의 반복문은 i, j, m 중복 같아 보여서 ...
#. 좀 더 하자면, db읽는 작업을 스레드 안쪽으로 옮겨서, array[]를 없애고 직접 XArray, YArray로 할당하는 게 더 좋을 듯.
#. 데이터가 없어서 그래프는 못그려보겠네요.
@Override
public void onClick(View v) {
String qry;
switch (v.getId()) {
case R.id.mpmgraph:
Toast.makeText(LineGraph.this, "mpm data graph", Toast.LENGTH_SHORT).show();
qry = "SELECT _id, wave, power, date, time, address, place, name, memo, power_unit, flag, il "
+ "FROM KSJV2 WHERE flag='" + 1 + "';";
break;
case R.id.graphbtn:
default:
Toast.makeText(LineGraph.this, "Smartphone data graph", Toast.LENGTH_SHORT).show();
qry = "SELECT _id, wave, power, date, time, address, place, name, memo, power_unit, flag, il "
+ "FROM KSJV2 WHERE flag='" + 0 + "';";
break;
}
DataBaseManager db = new DataBaseManager(LineGraph.this);
SQLiteDatabase sql = db.getReadableDatabase();
Cursor c = sql.rawQuery(qry, null);
Toast.makeText(LineGraph.this, "DATA Count : " + c.getCount(), Toast.LENGTH_SHORT).show();
final String[] array = new String[c.getCount()]; // row길이로 배열 생성.
int k = 0;
while (c.moveToNext()) {
array[k] = c.getString(2);
if (array[k].equals("---.--")) {
array[k] = "-13.25";
} else {
array[k] = c.getString(2);
}
k++;
}
LinearLayout llbody = (LinearLayout) findViewById(R.id.llbody);
dataset.addSeries(series);
mRenderer.addSeriesRenderer(renderer);
mRenderer.setChartTitle("Optical Power Graph");
mRenderer.setXTitle("OPTICAL");
mRenderer.setLabelsTextSize(15);
mRenderer.setYTitle("POWER");
mRenderer.setZoomButtonsVisible(true); // 줌 기능 표시 여부 결정
mRenderer.setShowGrid(true);
mRenderer.setPointSize(3f);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.BLACK); // mRenderer.setApplyBackgroundColor(true);를 해줘야 컬러가 적용된다.
mRenderer.setMarginsColor(Color.BLACK);
mRenderer.setXLabels(10);
mRenderer.setYLabels(10);
mRenderer.setLabelsTextSize(20);
mRenderer.setYLabelsAlign(Align.CENTER);
mRenderer.setShowLegend(true);
mRenderer.setLegendTextSize(15); // 맨 하단 그래프 이름 사이즈 결정
gv = ChartFactory.getLineChartView(this, dataset, mRenderer);
llbody.addView(gv);
new Thread() {
public void run()
{
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
int[] Xarray = new int[array.length];
float[] Yarray = new float[array.length];
for (int j = 0; j < array.length; j++) { // ??
Xarray[j] = j;
Yarray[j] = Float.parseFloat(array[j]);
series.add(Xarray[j], Yarray[j]);
}
gv.repaint();
}
}.start();
}
#. MainActivity의 onScroll은 스크롤 시작시 뿐만 아니라, 스크롤 되는 도중에도 계속 이벤트가 발생합니다.