如何在Android中从数据库中检索日期并将其绘制在折线图上
下面是我的应用程序代码的一部分,它在折线图上绘制特定日期的值。这些日期是在Android中从数据库中检索到的 以下是MainActivity.java中折线图的代码:如何在Android中从数据库中检索日期并将其绘制在折线图上,android,sqlite,date,Android,Sqlite,Date,下面是我的应用程序代码的一部分,它在折线图上绘制特定日期的值。这些日期是在Android中从数据库中检索到的 以下是MainActivity.java中折线图的代码: public void openChart() { // TODO Auto-generated method stub Date[] dt = new Date[100];//new Date[c.getCount()]; int i=0; c=dbAdapter.
public void openChart() {
// TODO Auto-generated method stub
Date[] dt = new Date[100];//new Date[c.getCount()];
int i=0;
c=dbAdapter.getAllRecords();
c.moveToFirst();
//List<Date> dt = new ArrayList<Date>();
while(c.moveToNext()){
String stringDate = c.getString(1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = sdf.parse(stringDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dt[i] = date;//dt.add(date);//
i++;
}
//double[] numbers = {20.0,20.1,20.2,20.3,20.4,20.5,20.6,20.7,20.8,20.9,21.0,21.2};
Double[] numbers = new Double[100];
TimeSeries numbersTime = new TimeSeries("Numbers Time");
for(int i2=0;i2<dt.length;i2++){
numbers[i2]=(double) i2;
numbersTime.add(dt[i2],numbers[i2]);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(numbersTime);
XYSeriesRenderer numbersRenderer = new XYSeriesRenderer();
numbersRenderer.setColor(Color.BLACK);
numbersRenderer.setPointStyle(PointStyle.CIRCLE);
numbersRenderer.setFillPoints(true);
numbersRenderer.setLineWidth(2);
numbersRenderer.setDisplayChartValues(true);
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setChartTitle("Visits vs Views Chart");
multiRenderer.setXTitle("Date Time");
multiRenderer.setYTitle("Double Numbers");
multiRenderer.setZoomButtonsVisible(true);
multiRenderer.addSeriesRenderer(numbersRenderer);
// Creating an intent to plot line chart using dataset and multipleRenderer
Intent intent = ChartFactory.getLineChartIntent(getBaseContext(), dataset, multiRenderer);
// Start Activity
startActivity(intent);
}
在这里,我在第105行得到nullPointer异常,它是'numbertime.add(dt[i2],numbers[i2]);'陈述我不清楚如何从数据库中检索日期并在聊天室中打印出来。请为我的例外提供解决方案
附言:如果我的问题不清楚,问我一些修改。谢谢。在我的项目中,我有这样的东西:
List<Date[]> dates = new ArrayList<Date[]>();
dates.add(new Date[valueY.length]);
for(int i = 0; i < valueY.length; i++) {
dates.get(0)[i] = new Date((Integer.valueOf(valueY[i].split("/")[2]) - 1900), (parseDayAndMonth(valueY[i].split("/")[1]) - 1), parseDayAndMonth(valueY[i].split("/")[0]));
}
ChartFactory.getTimeChartView(ReportsEngine.getApplicationContext(), buildDateDataset(titles, dates, values), renderer, "dd/MM");
我得到这样的图表:
List<Date[]> dates = new ArrayList<Date[]>();
dates.add(new Date[valueY.length]);
for(int i = 0; i < valueY.length; i++) {
dates.get(0)[i] = new Date((Integer.valueOf(valueY[i].split("/")[2]) - 1900), (parseDayAndMonth(valueY[i].split("/")[1]) - 1), parseDayAndMonth(valueY[i].split("/")[0]));
}
ChartFactory.getTimeChartView(ReportsEngine.getApplicationContext(), buildDateDataset(titles, dates, values), renderer, "dd/MM");
这是我的parseDayAndMonth()
方法
public static Integer parseDayAndMonth(String number) {
Integer num = Integer.valueOf(number);
if(num < 10) {
number = number.replace("0", "");
}
return Integer.valueOf(number);
}
public静态整数parseDayAndMonth(字符串编号){
Integer num=整数。valueOf(number);
如果(数值<10){
编号=编号。替换(“0”,替换为“);
}
返回整数.valueOf(number);
}
看起来您的dt[i2]
在某个点上是空的,这可能是由您的date=sdf.parse(stringDate)引起的代码>。如果解析失败,则不会设置日期
,因此它将保持为空
尝试将其设置为catch中的默认值,或者在执行numbertime.add(dt[i2],numbers[i2])
是的,我已经初始化了null(eclipse通过显示错误行强制我这样做),您可以编写示例代码如何在catch中设置默认值吗。所以,我几乎可以解决这个问题了。ThankUThis可以做到这一点,但这取决于您的数据,合理的回退值是多少。。。catch(parsee){date=new date();}