【问题标题】:AChartEngine - Charts with data from parse.com won't displayAChartEngine - 带有来自 parse.com 的数据的图表不会显示
【发布时间】:2014-03-25 12:04:30
【问题描述】:

我想根据来自 parse.com 的数据创建应用程序来形成图表。我已经阅读了一些示例和教程,但仍然无法显示图表。以下是我的代码:

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.util.Log;

import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import java.util.ArrayList;

public class LineGraph {

    public ArrayList<Integer> dataArray;

    XYMultipleSeriesDataset dataset;
    XYMultipleSeriesRenderer renderer;
    public static boolean ClickEnabled = true;

    public Intent getIntent(Context context) {

        ArrayList<Integer> y = this.dataArray;

        XYSeries seriesY = new XYSeries("Y");
        for (int i = 0; i < y.size(); i++) {
            seriesY.add(i, y.get(i));
        }
        dataset = new XYMultipleSeriesDataset();
        dataset.addSeries(seriesY);

        renderer.setPanEnabled(true, false);
        renderer.setClickEnabled(ClickEnabled);
        renderer.setBackgroundColor(Color.WHITE);
        renderer.setApplyBackgroundColor(true);
        renderer.setChartTitle("Simple data");
        renderer.setAxesColor(Color.BLACK);
        XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
        XYSeriesRenderer renderer = new XYSeriesRenderer();
        renderer.setColor(Color.RED);
        renderer.setPointStyle(PointStyle.DIAMOND);
        mRenderer.addSeriesRenderer(renderer);

        Intent intent = ChartFactory.getLineChartIntent(context, dataset, mRenderer, "Line Graph Title");
        return intent;
    }

    public void getData() {
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Counters_data");
        query.getInBackground("lxFzCTeOcl", new GetCallback<ParseObject>() {
            public void done(ParseObject parseObject, ParseException e) {

                if (e == null) {
                    String object = parseObject.getString("value");
                    Integer objectValue = Integer.parseInt(object);
                    if (dataArray == null) {
                        dataArray = new ArrayList<Integer>();
                        dataArray.add(objectValue);
                    }
                } else {
                    Log.d("score", "Error: " + e.getMessage());
                }
            }
        });
    }
}

还有我如何调用图表:

public void lineGraphHandler(View view) {
        LineGraph line = new LineGraph();
        line.getData();
        Intent lineIntent = line.getIntent(this);
        startActivity(lineIntent);
    }

还有XML部分:

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/counters"
        android:onClick="lineGraphHandler"
        android:text="Charts"
        android:id="@+id/charts"/>

有我的日志猫:

03-26 08:42:13.096 1229-1229/com.example.tst D/dalvikvm﹕延迟启用 CheckJNI 03-26 08:42:13.487 1229-1229/com.example.tst D/libEGL:已加载 /system/lib/egl/libEGL_genymotion.so 03-26 08:42:13.491 1229-1229/com.example.tst D/: HostConnection::get() 新主机 连接建立 0xb94f4270,tid 1229 03-26 08:42:13.551 1229-1229/com.example.tst D/libEGL:已加载 /system/lib/egl/libGLESv1_CM_genymotion.so 03-26 08:42:13.551 1229-1229/com.example.tst D/libEGL:已加载 /system/lib/egl/libGLESv2_genymotion.so 03-26 08:42:14.035 1229-1229/com.example.tst W/EGL_genymotion:eglSurfaceAttrib not 实施 03-26 08:42:14.039 1229-1229/com.example.tst E/OpenGLRenderer:从 GradienCache 03-26 获取 MAX_TEXTURE_SIZE 08:42:14.043 1229-1229/com.example.tst E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE:4096 03-26 08:42:14.055 1229-1229/com.example.tst E/OpenGLRenderer:从获取 MAX_TEXTURE_SIZE 缓存::initConstraints() 03-26 08:42:14.063 1229-1229/com.example.tst E/OpenGLRenderer: MAX_TEXTURE_SIZE: 4096 03-26 08:42:14.063 1229-1229/com.example.tst D/OpenGLRenderer:启用调试模式0 03-26 08:42:50.327 1229-1229/com.example.tst D/dalvikvm﹕GC_FOR_ALLOC freed 200K, 8% free 2975K/3228K, paused 10ms, total 13ms 03-26 08:42:51.675 1229-1229/com.example.tst D/dalvikvm: GC_FOR_ALLOC 已释放 431K,14%免费 3056K/3540K,暂停22ms,共28ms 03-26 08:42:52.043 1229-1229/com.example.tst W/EGL_genymotion:eglSurfaceAttrib not 实施 03-26 08:42:53.543 1229-1229/com.example.tst I/Choreographer﹕跳过89帧!该应用程序可能也在做 在它的主线程上做了很多工作。 03-26 08:43:01.747 1229-1229/com.example.tst D/AndroidRuntime:关闭VM 03-26 08:43:01.747 1229-1229/com.example.tst W/dalvikvm﹕threadid=1: thread 以未捕获的异常退出(组=0xa4d8fb20)03-26 08:43:01.767 1229-1229/com.example.tst E/AndroidRuntime:致命异常:主要 进程:com.example.tst,PID:1229 java.lang.IllegalStateException: 无法执行活动的方法 android.view.View$1.onClick(View.java:3823) 在 android.view.View.performClick(View.java:4438) 在 android.view.View$PerformClick.run(View.java:18422) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(Native Method) 原因: java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3818) 在 android.view.View.performClick(View.java:4438) 在 android.view.View$PerformClick.run(View.java:18422) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017)
在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
在 dalvik.system.NativeStart.main(Native Method) 引起: java.lang.NullPointerException 在 com.example.tst.LineGraph.getIntent(LineGraph.java:36) 在 com.example.tst.MainActivity.lineGraphHandler(MainActivity.java:44)
在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3818) 在 android.view.View.performClick(View.java:4438) 在 android.view.View$PerformClick.run(View.java:18422) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017)
在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
在 dalvik.system.NativeStart.main(本机方法)03-26 08:43:04.507 1229-1229/com.example.tst I/Process:发送信号。 PID:1229 SIG:9

我不明白问题出在哪里。当我按下“图表”按钮时,我的应用程序启动但立即崩溃。是数据类型的问题还是因为我误解了什么? 提前谢谢你。

我试过这样但还是崩溃了:

public void done(ParseObject parseObject, ParseException e) {

                if (e == null) {
                    String object = parseObject.getString("value");
                    Integer objectValue = Integer.parseInt(object);
                    if (dataArray == null) {
                        dataArray = new ArrayList<Integer>();
                        dataArray.add(objectValue);

                        ArrayList<Integer> y = dataArray;
                        XYSeries seriesY = new XYSeries("Y");
                        for (int i = 0; i < y.size(); i++) {
                            seriesY.add(i, y.get(i));

                            dataset = new XYMultipleSeriesDataset();
                            dataset.addSeries(seriesY);
                        }

                    }

【问题讨论】:

  • 你能显示你的 logcat 吗?

标签: java android parse-platform achartengine


【解决方案1】:

您的getData() 异步检索数据。调用getIntent()dataArray不会立即初始化。

等待异步操作完成,然后再使用那里的数据。例如,从done() 回调中调用需要该数据的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多