柱形图,其中 sqllite Db 值基于微调器值变化



我对这个API很陌生。我有使用此 API 做示例的知识。之后,我的要求是基于微调器值选择显示列图。查询表数据来得正确,问题是没有将最新值附加到图表。

   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....

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

chartView.getSeries().add(product1);

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

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

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

最新更新