如何从数据库中检索日期,并画出他们在Android上的折线图 [英] How to retrieve the dates from database and plot them on the Line Chart in Android

查看:349
本文介绍了如何从数据库中检索日期,并画出他们在Android上的折线图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的应用程序的code绘出的值线图上的某一特定日期的一部分。日期是从Android的数据库中检索。

下面是code的线图是在MainActivity.java:

 公共无效openChart(){
        // TODO自动生成方法存根
        日期[] = DT新日期[100]; //新日期[c.getCount()];
        INT I = 0;
        C = dbAdapter.getAllRecords();
        c.moveToFirst();
        //列表<日期和GT; DT =新的ArrayList<日期及GT;();        而(c.moveToNext()){
            串stringDate = c.getString(1);
            SimpleDateFormat的SDF =新的SimpleDateFormat(YYYY-MM-DD HH:MM:SS);
            日期日期= NULL;
            尝试{
                日期= sdf.parse(stringDate);
            }赶上(ParseException的E){
                // TODO自动生成catch块
                e.printStackTrace();
            }
            DT [i] =日期; // dt.add(日期); //
            我++;
        }        //双[]号= {} 20.0,20.1,20.2,20.3,20.4,20.5,20.6,20.7,20.8,20.9,21.0,21.2;
        双[]号=新的双[100];        TimeSeries的numbersTime =新的TimeSeries(数字时代);        为(中间体I2 = 0; I2&下; dt.length; I2 ++){
            编号[12] =(双)12;
            numbersTime.add(dt的[12],数字[12]);
        }        XYMultipleSeriesDataset数据=新XYMultipleSeriesDataset();
        dataset.addSeries(numbersTime);
        XYSeriesRenderer numbersRenderer =新XYSeriesRenderer();
        numbersRenderer.setColor(Color.BLACK);
        numbersRenderer.setPointStyle(PointStyle.CIRCLE);
        numbersRenderer.setFillPoints(真);
        numbersRenderer.setLineWidth(2);
        numbersRenderer.setDisplayChartValues​​(真);        XYMultipleSeriesRenderer multiRenderer =新XYMultipleSeriesRenderer();         multiRenderer.setChartTitle(访问VS意见表);
         multiRenderer.setXTitle(日期时间);
         multiRenderer.setYTitle(双号);
         multiRenderer.setZoomButtonsVisible(真);         multiRenderer.addSeriesRenderer(numbersRenderer);         //使用的数据集和multipleRenderer创建意图情节线图
            意图意图= ChartFactory.getLineChartIntent(getBaseContext(),数据集,multiRenderer);
            //开始活动
            startActivity(意向);
    }

和这里去LogCat中文件行:

  01-25 19:14:30.531:D / AndroidRuntime(31866):关闭VM
01-25 19:14:30.531:W / dalvikvm(31866):主题ID = 1:螺纹未捕获的异常(组= 0x40018578)退出
01-25 19:14:30.546:E / AndroidRuntime(31866):致命异常:主要
01-25 19:14:30.546:E / AndroidRuntime(31866):显示java.lang.NullPointerException
01-25 19:14:30.546:E / AndroidRuntime(31866):在org.achartengine.model.TimeSeries.add(TimeSeries.java:41)
01-25 19:14:30.546:E / AndroidRuntime(31866):在com.example.dateexample.seenu.MainActivity.openChart(MainActivity.java:105)
01-25 19:14:30.546:E / AndroidRuntime(31866):在com.example.dateexample.seenu.MainActivity $ 2.onClick(MainActivity.java:70)
01-25 19:14:30.546:E / AndroidRuntime(31866):在android.view.View.performClick(View.java:2485)
01-25 19:14:30.546:E / AndroidRuntime(31866):在android.view.View $ PerformClick.run(View.java:9080)
01-25 19:14:30.546:E / AndroidRuntime(31866):在android.os.Handler.handleCallback(Handler.java:587)
01-25 19:14:30.546:E / AndroidRuntime(31866):在android.os.Handler.dispatchMessage(Handler.java:92)
01-25 19:14:30.546:E / AndroidRuntime(31866):在android.os.Looper.loop(Looper.java:130)
01-25 19:14:30.546:E / AndroidRuntime(31866):在android.app.ActivityThread.main(ActivityThread.java:3687)
01-25 19:14:30.546:E / AndroidRuntime(31866):在java.lang.reflect.Method.invokeNative(本机方法)
01-25 19:14:30.546:E / AndroidRuntime(31866):在java.lang.reflect.Method.invoke(Method.java:507)
01-25 19:14:30.546:E / AndroidRuntime(31866):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867)
01-25 19:14:30.546:E / AndroidRuntime(31866):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
01-25 19:14:30.546:E / AndroidRuntime(31866):在dalvik.system.NativeStart.main(本机方法)

在这里,我得到的行空指针异常:105,它是numbersTime.add(DT [12],数字[12]);'声明。我不清楚如何从数据库中检索的日期,并画出他们聊天。请为我提供例外的解决方案。

P.S:如果我的问题是不明确的问我一些编辑。 Thanku。


解决方案

它看起来像你的 DT [12] 是在某些时候,这可能是引起空的 =日期sdf.parse(stringDate); 。如果解析失败,则日期不被设置,所以它会留下空。

尝试在你抓它设置为默认值,或之前明确你做 numbersTime.add(DT [12],数字[12]) <检查null / p>

here is the part of the code of my application that plots the values for a particular date on the line chart. The dates are retrieved from the database in Android.

Here is the code for the line chart that is in MainActivity.java:

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);
    }

And here goes LogCat file lines:

01-25 19:14:30.531: D/AndroidRuntime(31866): Shutting down VM
01-25 19:14:30.531: W/dalvikvm(31866): threadid=1: thread exiting with uncaught exception (group=0x40018578)
01-25 19:14:30.546: E/AndroidRuntime(31866): FATAL EXCEPTION: main
01-25 19:14:30.546: E/AndroidRuntime(31866): java.lang.NullPointerException
01-25 19:14:30.546: E/AndroidRuntime(31866):    at org.achartengine.model.TimeSeries.add(TimeSeries.java:41)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at com.example.dateexample.seenu.MainActivity.openChart(MainActivity.java:105)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at com.example.dateexample.seenu.MainActivity$2.onClick(MainActivity.java:70)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at android.view.View.performClick(View.java:2485)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at android.view.View$PerformClick.run(View.java:9080)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at android.os.Handler.handleCallback(Handler.java:587)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at android.os.Looper.loop(Looper.java:130)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at android.app.ActivityThread.main(ActivityThread.java:3687)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at java.lang.reflect.Method.invokeNative(Native Method)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at java.lang.reflect.Method.invoke(Method.java:507)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
01-25 19:14:30.546: E/AndroidRuntime(31866):    at dalvik.system.NativeStart.main(Native Method)

Here I'm getting nullPointer exception at line:105, it is 'numbersTime.add(dt[i2],numbers[i2]);' statement. I'm not clear how to retrieve the dates from the database and plot them on the chat. Kindly provide solution for my exception.

P.S: If my question is not clear ask me some edits. Thanku.

解决方案

It looks like your dt[i2] is null at some point, which is probably caused by your date = sdf.parse(stringDate);. If the parse fails, the date doesn't get set so it will stay null.

Try setting it to a default value in your catch, or check for null specifically before you do numbersTime.add(dt[i2],numbers[i2])

这篇关于如何从数据库中检索日期,并画出他们在Android上的折线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆