0

我对这个 API 很陌生。我知道用这个 API 做样本。之后我的要求是显示基于 Spinner Values 选择的列图。查询表数据正确出现问题是没有将最新值附加到图表 。

   In My App i have one spinner name it as Customer Name:
when i change the spinner-value i am sending the Customer name to input parameter to sqllite and display the graph for that i write the following code.

package com.appulento.salestracking;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Vector;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;

import com.appulento.salestrackingdb.DBAdapter;
import com.artfulbits.aiCharts.ChartView;
import com.artfulbits.aiCharts.Base.ChartArea;
import com.artfulbits.aiCharts.Base.ChartAxis;
import com.artfulbits.aiCharts.Base.ChartCollection;
import com.artfulbits.aiCharts.Base.ChartCollection.IChangeListener;
import com.artfulbits.aiCharts.Base.ChartNamedCollection;
import com.artfulbits.aiCharts.Base.ChartPalette;
import com.artfulbits.aiCharts.Base.ChartPoint;
import com.artfulbits.aiCharts.Base.ChartSeries;
import com.artfulbits.aiCharts.Types.ChartTypes;

public class SalesTrackingByCustomer extends Activity {

    private DBAdapter db;
    private Spinner spinner1, spinner2;
     private String[] prodctnames;
     private String[] prodctnames1;
     private double[] product_1;
     private double[] product_2;
     public int count;
     public String custid;
     public Sample customerdetails;
     public ChartCollection<String> collection;
     ChartArea area;
     ChartArea area1;

      private SimpleAdapter mSchedule;

     Vector<String> vec_custid=new Vector<String>();
     Vector<String> vec_oldno=new Vector<String>();
     Vector<String> vec_productid=new Vector<String>();
     Vector<String> vec_qty=new Vector<String>();
     private ListView mListView;

  @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bycustomers);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    mListView=(ListView)findViewById(R.id.listView1);
    prodctnames=new String[10];
    product_1=new double[10];

    prodctnames1=new String[10];
    product_2=new double[10];

    db=new DBAdapter(this);

    final ChartView chartView = (ChartView) findViewById(R.id.chartView);

    ChartPalette palette = new ChartPalette(0xffffd7e8);
    chartView.setPalette(palette);
    final ChartSeries product1 = new ChartSeries("P1", ChartTypes.Column);


    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

            int position=spinner1.getSelectedItemPosition();
            System.out.println("=====ITEM POSITION======"+position);

            final String selected=arg0.getItemAtPosition(arg2).toString();
            System.out.println("=====IN SELECTED======"+selected);
                    //finish();
            db.open();
            Cursor customer=db.fetchorderCustomername(selected);
            custid=customer.getString(0);
            System.out.println("=====CUSTOMER NAME ID======"+custid);
            Cursor cursor=db.fetchorderDetails(custid);
            count=cursor.getCount();
            System.out.println("=====COUNT======"+count);

            int i=0;
                    while (i<count)
                    {
                        String productid=cursor.getString(1);
                        prodctnames[i]=productid;

                        String qty=cursor.getString(2);
                        product_1[i]=Double.parseDouble(qty);
                        System.out.println("=====PROID======"+prodctnames[i]+"=====QUANTITY======"+product_1[i]);
                        cursor.moveToNext();
                        i++;

                    }

                    for (int j = 0; j < count; j++)
                    {
                        ChartPoint point = product1.getPoints().addXY(j, product_1[j]);
                        point.setAxisLabel(prodctnames[j]);
                    }

                    if(position==0)
                    {
                       chartView.refreshDrawableState();

                       chartView.getSeries().add(product1);


                       area = chartView.getAreas().get(0);

                    area.getDefaultXAxis().setLabelsMode(ChartAxis.LabelsMode.SeriesLabels);

                    }
                    if(position==1)
                    {

                       chartView.refreshDrawableState();

                       chartView.getSeries().add(product1);
                        area1 = chartView.getAreas().get(0);

                        area1.getDefaultXAxis().setLabelsMode(ChartAxis.LabelsMode.SeriesLabels);
                    }

                  //area.refresh();
                    db.close();

                            }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });



  My problem is at first time Application Launch the graph is Displaying  successfully when i change the Spinner value selection the app got closed and display the  fallowing exception in my log cat:


java.security.InvalidParameterException: This name already presents at com.artfulbits.aiCharts.Base.ChartNamedCollection.validateName(SourceFile:128 ) at com.artfulbits.aiCharts.Base.ChartNamedCollection.validate

please see once and let me know where i am doing Mistake in my code.The dynamic vlaues is not appending to that chart in the above code.
Thanks in Advance....
4

1 回答 1

0

问题是您正在尝试添加具有相同名称的新区域。我对 API 不够精通,但我想当你第二次尝试这条线时问题就会出现:

chartView.getSeries().add(product1);

我还注意到您从未使用过以下内容:

prodctnames1=new String[10];
product_2=new double[10];

如果我可以提出建议,也许最好将您的所有代码都放在点击侦听器中。也许您可以在开始时填写数据集,然后仅在使用微调器时显示图表。因为如果多次单击微调器,您必须去数据库获取相同的信息。

于 2012-11-22T08:40:32.733 回答