Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AndroidPlot:无法从Android应用程序中的列表数据显示折线图_Android_Mysql_Json_List_Androidplot - Fatal编程技术网

AndroidPlot:无法从Android应用程序中的列表数据显示折线图

AndroidPlot:无法从Android应用程序中的列表数据显示折线图,android,mysql,json,list,androidplot,Android,Mysql,Json,List,Androidplot,我想在AndroidPlot折线图中根据时间戳显示一些浮点温度值,并通过JSON解析从MySQL数据库中检索几组这些值。温度值被接收到的很好,我试图将它们保存在列表中,但是当我打印值时,设备上的GUI中没有显示任何东西 下面是该程序的一些细节:我使用AsyncTask在方法doInBackground()中检索临时值,并将绘制图形的代码放入onPostExecute()。我正在从数据库中检索5个值,但奇怪的是,当我将它们放在一个列表中,并尝试根据一些5个常量值绘制图形时,例如Number[]se

我想在AndroidPlot折线图中根据时间戳显示一些浮点温度值,并通过JSON解析从MySQL数据库中检索几组这些值。温度值被接收到的很好,我试图将它们保存在列表中,但是当我打印值时,设备上的GUI中没有显示任何东西

下面是该程序的一些细节:我使用AsyncTask在方法
doInBackground()
中检索临时值,并将绘制图形的代码放入
onPostExecute()
。我正在从数据库中检索5个值,但奇怪的是,当我将它们放在一个列表中,并尝试根据一些5个常量值绘制图形时,例如
Number[]seriesNumbers={1,2,3,4,5}我在LogCat中得到一个错误,即
xVal
yVal
参数必须具有相同的大小。我已经打印出了我从JSON解析器中得到的内容,可以肯定的是,只有5个值。我认为它至少应该在自己绘制
arraylist1
时起作用,但在这种情况下,图形是空白的

我的完整活动代码:

public class MainActivity extends Activity {

    public static XYPlot plot;

    private ProgressDialog pDialog;

    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();

    static List<Number> arraylist1 = new ArrayList<Number>();

    private static String url_sensor_data = "http://iotautomationtech.com/android_connect/get_sensor_data.php";

    private static final String TAG_SUCCESS = "success";
    private static final String TAG_deviceS = "devices";
    private static final String TAG_PID = "id";
    private static final String TAG_VAL = "value";
    private static final String TAG_TIME = "timestamp";

    Number[] seriesNumbers = { 1, 2, 3, 4, 5 };

    JSONParser jsonParser = new JSONParser();

    JSONArray devices = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_xy_plot_example);

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

        new LoadSensorData().execute();

        plotDraw();

    }

    class LoadSensorData extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading sensor data. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        protected String doInBackground(String... args) {

            List<NameValuePair> params = new ArrayList<NameValuePair>();

            JSONObject json = jParser.makeHttpRequest(url_sensor_data, "GET",
                    params);

            Log.d("Sensor data: ", json.toString());

            try {

                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {

                    devices = json.getJSONArray(TAG_deviceS);

                    for (int i = 0; i < devices.length(); i++) {

                        JSONObject c = devices.getJSONObject(i);

                        String id = c.getString(TAG_PID);
                        String value1 = c.getString(TAG_VAL); // <-- temperature value from JSON parser
                        String time = c.getString(TAG_TIME);

                        value1.trim(); // <-- trim the string

                        if (isFloat(value1)) {
                            float tempVal = Float.parseFloat(value1);
                            arraylist1.add(tempVal); // <-- add it to arraylist1 if it is valid float
                        }

                        Log.d("Check: ", value1.toString()); // <-- returns 5 values in LogCat
                    }
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        protected void onPostExecute(String file_url) {

            pDialog.dismiss();

        }

    }

    public static boolean isFloat(String number) {
        try {
            return (!new Float(number).isNaN());
        } catch (NumberFormatException e) {
            return false;
        }
    }

    public void plotDraw() {

        plot.setDomainLabel("Time");
        plot.setRangeLabel("Temp");
        plot.setTitle("Temperature Trend");

        XYSeries series1 = new SimpleXYSeries(arraylist1, arraylist1, "Series1");

        LineAndPointFormatter series1Format = new LineAndPointFormatter();
        series1Format.setPointLabelFormatter(new PointLabelFormatter());
        series1Format.configure(getApplicationContext(),
                R.xml.line_point_formatter_with_plf1);

        plot.addSeries(series1, series1Format);

        plot.setTicksPerRangeLabel(3);
        plot.getGraphWidget().setDomainLabelOrientation(-45);
    }
}
当我这样做时,它也不会崩溃,但没有线条,只有空白的图表GUI:

        XYSeries series1 = new SimpleXYSeries(arraylist1, arraylist1, "Series1");
我做错了什么?如何遍历ArrayList 1以查看温度值是否实际保存在列表中?SimpleXYSeries()是否接受我首先发送到这里的参数


感谢您的帮助

假设后台线程的行为符合预期,最可能的问题是在添加数据时从未重新绘制绘图。尝试在arraylist1之后添加此项。在doInBackground(…)方法中添加(tempVal)

        XYSeries series1 = new SimpleXYSeries(arraylist1, arraylist1, "Series1");
plot.redraw();