如何在图表引擎折线图中显示刷新 web 服务值?

How to display refresh webservice value in achartengine line chart?

我有图表引擎折线图,我成功地在折线图中显示了来自 json 网络服务的值。但问题是当我回调 asynctask 然后折线图在 x y 轴上显示旧值。不显示新值。下面是我的代码。

public void charDeclaration() {

    // For chart

    LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
    if (myChart == null) {

        initializeChartNew();

        myChart = ChartFactory.getLineChartView(this, dataset,
                multiRenderer);
        layout.addView(myChart);
    } else {
        myChart.repaint();
    }
}

@SuppressWarnings("deprecation")
private void initializeChartNew() {
    // Creating an XYSeries for Income
    fromTemp = new XYSeries("Temperature");

    for (int i = 0; i < temp_time.size(); i++) {
        fromTemp.add(i, Double.parseDouble(temp_details.get(i)));
        System.out.println("Temperature Details in Charts "
                + temp_details.get(i));
    }
    // Creating a dataset to hold each series
    dataset = new XYMultipleSeriesDataset();
    // Adding Income Series to the dataset
    dataset.addSeries(fromTemp);



    // Creating XYSeriesRenderer to customize incomeSeries
    from_tempRenderer = new XYSeriesRenderer();
    from_tempRenderer.setColor(Color.WHITE);
    from_tempRenderer.setPointStyle(PointStyle.CIRCLE);
    from_tempRenderer.setFillPoints(true);
    from_tempRenderer.setLineWidth(2);
    from_tempRenderer.setChartValuesTextSize(20);
    from_tempRenderer.setDisplayChartValues(true);

    // Creating XYSeriesRenderer to customize expenseSeries

    // Creating a XYMultipleSeriesRenderer to customize the whole chart
    multiRenderer = new XYMultipleSeriesRenderer();
    multiRenderer.setMargins(new int[] { 50, 50, 50, 50 });
    multiRenderer.setYLabelsAlign(Align.RIGHT);
    multiRenderer.setAxisTitleTextSize(20);
    multiRenderer.setChartTitleTextSize(20);
    multiRenderer.setLabelsTextSize(18);
    multiRenderer.setLegendTextSize(18);
    multiRenderer.setXLabels(0);

    for (int k = 0; k < temp_date.size(); k++) {
        multiRenderer.setChartTitle(temp_date.get(k));
        System.out
                .println("Temperature Date in Charts " + temp_date.get(k));
    }
    multiRenderer.setXTitle("Time");
    multiRenderer.setYTitle("Temperature");
    multiRenderer.setYLabelsPadding(5);
    multiRenderer.setZoomButtonsVisible(true);

    multiRenderer.setPointSize(5);

    for (int i = 0; i < temp_time.size(); i++) {
        multiRenderer.addXTextLabel(i, temp_time.get(i));

    }

    System.out.println("value of temp_details " + temp_details.size());

    multiRenderer.removeSeriesRenderer(from_tempRenderer);
    multiRenderer.addSeriesRenderer(from_tempRenderer);

}

Below is my AsyncTask

private class TemperatureDetails extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(MainActivity_New.this);
        pDialog.setMessage("Please Wait...");
        pDialog.setCancelable(false);
        pDialog.setIndeterminate(false);
        pDialog.setCanceledOnTouchOutside(false);
        pDialog.show();

        // building_segment_id="";
        /*
         * temp_details.clear(); date_time.clear(); temp_date.clear();
         * temp_time.clear();
         */

    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        try {
            System.out
                    .println("Temp Building Seg ID" + building_segment_id);
            // String temperature_url =
            // "http://www.intelatrek.com:98/Service1.svc/TempratueList?BeconID=329%20King&Date=2015-04-09";
            String temp_url = "http://db.stat-systems.co.nz:81/Service1.svc/TempratureList?BeconID="
                    + building_segment_id + "&Date=2015-04-13";
            System.out.println("BlucatID in Asynctask " + blucat_id);
            System.out.println("building_segment_id in AsyncTask "
                    + building_segment_id);

            temp_details.clear();
            date_time.clear();
            temp_date.clear();
            temp_time.clear();

            JSONObject jObject = JSONParser.getJsonFromURL(temp_url);
            tempjsonflag = jObject.getString("Flag");
            JSONArray jArray = jObject.getJSONArray("TempTransList");
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject job = jArray.getJSONObject(i);

                String BuildingId = job.getString("BuildingId");
                String BuildingSegmentId = job
                        .getString("BuildingSegmentId");
                // String Customer_ID = job.getString("Customer_ID");
                String DateTime = job.getString("DateTime");
                // String InnerLocationId =
                // job.getString("InnerLocationId");
                String Temp_Date = job.getString("TempDate");
                String Temp_Time = job.getString("TempTime");
                String Temperature = job.getString("Temperature");

                temp_details.add(Temperature);
                date_time.add(DateTime);
                temp_date.add(Temp_Date);
                temp_time.add(Temp_Time);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        if (pDialog != null) {
            pDialog.dismiss();
        }

        for (int i = 0; i < temp_details.size(); i++) {
            System.out
                    .println("Temperature Details " + temp_details.get(i));
            System.out.println("Temperature Date Time " + date_time.get(i));
            System.out.println("Temperature Temp Date " + temp_date.get(i));
            System.out.println("Temperature Temp Time " + temp_time.get(i));
        }
        System.out.println("Temp Details " + temp_details.size());
        System.out.println("Temp Date Time " + date_time.size());
        System.out.println("Temp Temp Date " + temp_date.size());
        System.out.println("Temp Temp Time " + temp_time.size());
        System.out.println("Temp JSON FLAG " + tempjsonflag);

        // if(tempjsonflag.equals("Success")){
        if (tempe_detail.toString().equals("")) {
            temp_textview_temperature.setVisibility(View.GONE);
            temp_textview_notfound.setVisibility(View.VISIBLE);
            imageview_degree.setVisibility(View.GONE);

            /*
             * LinearLayout layout = (LinearLayout)
             * findViewById(R.id.chart);
             */
            chart.setVisibility(View.GONE);
        } else {
            temp_textview_notfound.setVisibility(View.GONE);
            temp_textview_temperature.setVisibility(View.VISIBLE);

            temp_textview_temperature.setText(tempe_detail);
            temp_textview_temperature.setTextSize(70);
            imageview_degree.setVisibility(View.VISIBLE);
            // temp_textview_temperature.setLayoutParams(llp);
            /*
             * LinearLayout layout = (LinearLayout)
             * findViewById(R.id.chart);
             */
            chart.setVisibility(View.VISIBLE);

            charDeclaration();
        }

        if (temp_textview_temperature.getText().toString().equals("1")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("2")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("3")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("4")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("5")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("6")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("7")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("8")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else if (temp_textview_temperature.getText().toString()
                .equals("9")) {
            temp_textview_temperature.setPadding(25, 0, 0, 0);
        } else {
            temp_textview_temperature.setPadding(0, 0, 0, 0);
        }

        int dip = (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, (float) 1, getResources()
                        .getDisplayMetrics());

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);

        int widthPixels = dm.widthPixels;
        int heightPixels = dm.widthPixels;

        float scaleFactor = dm.density;

        float widthInches = widthPixels / scaleFactor;

        if (widthInches >= 720) {

            // 10" tablet resolutions
            if (tempe_detail.toString().equals("")) {
                temp_textview_temperature.setVisibility(View.GONE);
                temp_textview_notfound.setVisibility(View.VISIBLE);
                imageview_degree.setVisibility(View.GONE);
                // temp_textview_notfound.setText(60);

                chart.setVisibility(View.GONE);
            } else {
                temp_textview_notfound.setVisibility(View.GONE);
                temp_textview_temperature.setVisibility(View.VISIBLE);

                temp_textview_temperature.setText(tempe_detail);

                if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                    // Do some stuff
                    temp_textview_temperature.setTextSize(70);
                    imageview_degree.getLayoutParams().height = 30;
                    imageview_degree.getLayoutParams().width = 30;
                } else {
                    temp_textview_temperature.setTextSize(180);
                    imageview_degree.getLayoutParams().height = 50;
                    imageview_degree.getLayoutParams().width = 50;
                }

                imageview_degree.setVisibility(View.VISIBLE);

                // temp_textview_temperature.setLayoutParams(llp);

                chart.setVisibility(View.VISIBLE);
                charDeclaration();
            }



            if (temp_textview_temperature.getText().toString()
                    .matches("[0-9.]*")) {
                temp_textview_temperature.setPadding(0, 0, 0, 0);
            } else if (temp_textview_temperature.getText().length() == 3) {
                temp_textview_temperature.setPadding(20, 0, 0, 0);
            } else {
                temp_textview_temperature.setPadding(0, 0, 0, 0);
            }
        } else if (widthInches >= 600) {

            // 7" tablet resolutions
            if (tempe_detail.toString().equals("")) {
                temp_textview_temperature.setVisibility(View.GONE);
                temp_textview_notfound.setVisibility(View.VISIBLE);
                imageview_degree.setVisibility(View.GONE);


                chart.setVisibility(View.GONE);
            } else {
                temp_textview_notfound.setVisibility(View.GONE);
                temp_textview_temperature.setVisibility(View.VISIBLE);

                temp_textview_temperature.setText(tempe_detail);
                temp_textview_temperature.setTextSize(140);
                imageview_degree.setVisibility(View.VISIBLE);
                // temp_textview_temperature.setLayoutParams(llp);

                chart.setVisibility(View.VISIBLE);
                charDeclaration();
            }


            if (temp_textview_temperature.getText().toString()
                    .matches("[0-9.]*")) {
                temp_textview_temperature.setPadding(25, 0, 0, 0);
                if (temp_textview_temperature.getText().length() == 3) {


                    temp_textview_temperature.setPadding(0, 0, 0, 0);
                }
            }

            else {
                temp_textview_temperature.setPadding(0, 0, 0, 0);
            }
        }
        // }


    }

}

在日期更改后使用 myChart.repaint(); 重绘图表,如果重绘不起作用,那么在重绘图表之前尝试使用 removeAllViews() 到图表的父布局。

chartlayout.removeAllViews();