2011-10-06 3 views
0

Поддерживает ли sqlite десятичные точки? Могу ли я получить данные десятичных точек из базы данных sqlite и отобразить их на графике?Десятичные значения в SQLite Database Browser

Пример: Я сохраняю свою дату как «6.10» (6 октября) , и когда я ее получаю, она отображается только на дисплее. Так что я могу знать, если где-то мой код поступил неправильно?

public class Graph extends Activity implements OnTouchListener 
{ 

private XYPlot mySimpleXYPlot; 
private SimpleXYSeries mySeries; 
private PointF minXY; 
private PointF maxXY; 
private double minDif; 
private TextView txtView; 
final private double difPadding = 0.1; 
private float absMinX; 
private float absMaxX; 
private float minNoError; 
private float maxNoError; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.graph); 

    mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot); 
    mySimpleXYPlot.setOnTouchListener(this); 

    databaseHelper baseHelper = new databaseHelper(this); 

    try { 

     baseHelper.createDataBase(); 
     baseHelper.openDataBase(); 

} catch (IOException ioe) { 
        ioe.printStackTrace(); 

} 

    Cursor a = baseHelper.getData(); 

    Number[] yArray = new Number[a.getCount()]; 
    Number[] xArray = new Number[a.getCount()]; 

    if(a.moveToFirst()){ 

      yArray[0]=a.getInt(2); 
      xArray[0]=a.getInt(1); 

      } 
    for (int i=1; i<a.getCount(); i++) { 
     if(a.moveToNext()) { 
      yArray[i] = a.getInt(2); 
      xArray[i] = a.getInt(1); 
     } 
    } 


    mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot); 

try { 
    baseHelper.openDataBase(); 
}catch(SQLException sqle){ 
    System.out.println(sqle); 
    throw sqle; 

} 

try { 
    baseHelper.openDataBase(); 
    baseHelper.fetchAllXYDATA(); 
}catch(SQLException sqle1){ 
    throw sqle1; 

} 
    //create our series from our array of numbers: 
    mySeries = new SimpleXYSeries(Arrays.asList(xArray),Arrays.asList(yArray), "Water Spilled"); 

     Widget domainLabelWidget = mySimpleXYPlot.getDomainLabelWidget(); 

     mySimpleXYPlot.position(domainLabelWidget,      // the widget to position 
           45,         // x position value, in this case 45 pixels (375) 
           XLayoutStyle.ABSOLUTE_FROM_LEFT,  // how the x position value is applied, in this case from the left 
           -5,          // y position value, 0 
           YLayoutStyle.ABSOLUTE_FROM_BOTTOM,  // how the y position is applied, in this case from the bottom 
           AnchorPosition.LEFT_BOTTOM); 

     // AREA INSIDE THE XY AXIS 
     mySimpleXYPlot.getGraphWidget().getGridBackgroundPaint().setColor(Color.TRANSPARENT); 
     mySimpleXYPlot.getGraphWidget().getGridLinePaint().setColor(Color.TRANSPARENT); 

     mySimpleXYPlot.getGraphWidget().getGridLinePaint().setPathEffect(new DashPathEffect(new float[] {1,0},1)); 

     // X-AXIS 
     mySimpleXYPlot.getGraphWidget().getDomainOriginLinePaint().setColor(Color.WHITE); 

     //Numbers 
     //mySimpleXYPlot.getGraphWidget().getDomainLabelPaint().setColor(Color.BLUE); 

     // Y-AXIS 
     mySimpleXYPlot.getGraphWidget().getRangeOriginLinePaint().setColor(Color.WHITE); 

     mySimpleXYPlot.setBorderStyle(Plot.BorderStyle.NONE, null, null); 
     mySimpleXYPlot.getGraphWidget().getBackgroundPaint().setColor(Color.TRANSPARENT); 
     mySimpleXYPlot.getBorderPaint().setStrokeWidth(5); 
     mySimpleXYPlot.getBorderPaint().setAntiAlias(false); 

     //EXTERIOR BORDER 
     mySimpleXYPlot.getBorderPaint().setColor(Color.TRANSPARENT); 


     // Create a formatter to use for drawing a series using LineAndPointRenderer: 
     LineAndPointFormatter series1Format = new LineAndPointFormatter(
       Color.rgb(0, 100, 0),     // line color 

       Color.rgb(0, 100, 0),     // point color 

       Color.rgb(100, 200, 0));    //fill color 


     // setup our line fill paint to be a slightly transparent gradient: 
     Paint lineFill = new Paint(); 
     lineFill.setAlpha(200); 
     lineFill.setShader(new LinearGradient(0, 0, 0, 250, Color.TRANSPARENT, Color.TRANSPARENT, Shader.TileMode.MIRROR)); 

     LineAndPointFormatter formatter = new LineAndPointFormatter(Color.rgb(0, 255, 0), Color.GREEN, Color.GREEN); 
     formatter.setFillPaint(lineFill); 
     mySimpleXYPlot.getGraphWidget().setPaddingRight(15); 
     mySimpleXYPlot.addSeries(mySeries, formatter); 

     // draw a domain tick for each year: 
     mySimpleXYPlot.setDomainStep(XYStepMode.SUBDIVIDE, xArray.length); 
     mySimpleXYPlot.setRangeStep(XYStepMode.SUBDIVIDE, yArray.length); 

     // customize our domain/range labels 
     mySimpleXYPlot.setDomainLabel("Date (DD)"); 
     mySimpleXYPlot.setRangeLabel("Water Spill (ml)"); 

     mySimpleXYPlot.getGraphWidget().setRangeLabelWidth(25); 
     // get rid of decimal points in our range labels: 
     mySimpleXYPlot.setRangeValueFormat(new DecimalFormat("0")); 

     mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("0")); 

     // by default, AndroidPlot displays developer guides to aid in laying out your plot. 
     // To get rid of them call disableAllMarkup(): 
     mySimpleXYPlot.disableAllMarkup(); 

     mySimpleXYPlot.getScrollX(); 

     mySimpleXYPlot.redraw(); 
} 
+0

Не могли бы вы предоставить инструкцию CREATE? –

+0

«непосредственно» распознанные строки даты и времени для SQLite описаны здесь: http://www.sqlite.org/lang_datefunc.html - DD.MM (например, 6.10) напрямую не поддерживается - и определенно не даст полезное целочисленное значение при выборе напрямую. Я бы пересмотрел, как и что вы храните в качестве значений своего домена. – Jens

ответ

0

getInt явно возвращает Int.

вам нужно позвонить getDouble, чтобы получить десятичное значение.

Также необходимо использовать тип REAL sqlite для десятичных значений.

+0

SQLite хранит все как 'String' в базе данных, я считаю. Вы можете использовать тип 'FOOBARBAZ', и он все равно будет работать. Магия находится в преобразовании драйверов из строки в любой. Ваш комментарий 'getDouble' находится на месте. – Gray

+0

Хорошо! Спасибо! Я дам ему попробовать! – slzx

Смежные вопросы