0

Androidで棒グラフを作成するには?

注:- しかし、Web サービスの x 軸と y 軸の値を使用する必要があります。 これは、Web サービスが x 軸と y 軸の値を表示することを意味します。それまでに、棒グラフを作成するために、これらの値を x 軸と y 軸の値として使用する必要があります。

これを行う方法は?提案してください。

ログキャット

09-21 15:09:53.103: D/AndroidRuntime(271): Shutting down VM
09-21 15:09:53.103: W/dalvikvm(271): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-21 15:09:53.114: E/AndroidRuntime(271): FATAL EXCEPTION: main
09-21 15:09:53.114: E/AndroidRuntime(271): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.xmlparsing_test/com.example.xmlparsing_test.BarGraphActivity}: java.lang.NullPointerException
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.os.Looper.loop(Looper.java:123)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-21 15:09:53.114: E/AndroidRuntime(271):  at java.lang.reflect.Method.invokeNative(Native Method)
09-21 15:09:53.114: E/AndroidRuntime(271):  at java.lang.reflect.Method.invoke(Method.java:521)
09-21 15:09:53.114: E/AndroidRuntime(271):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-21 15:09:53.114: E/AndroidRuntime(271):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-21 15:09:53.114: E/AndroidRuntime(271):  at dalvik.system.NativeStart.main(Native Method)
09-21 15:09:53.114: E/AndroidRuntime(271): Caused by: java.lang.NullPointerException
09-21 15:09:53.114: E/AndroidRuntime(271):  at com.example.xmlparsing_test.BarGraphActivity.buildBarDataset(BarGraphActivity.java:115)
09-21 15:09:53.114: E/AndroidRuntime(271):  at com.example.xmlparsing_test.BarGraphActivity.DrawGraph(BarGraphActivity.java:57)
09-21 15:09:53.114: E/AndroidRuntime(271):  at com.example.xmlparsing_test.BarGraphActivity.onCreate(BarGraphActivity.java:22)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-21 15:09:53.114: E/AndroidRuntime(271):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-21 15:09:53.114: E/AndroidRuntime(271):  ... 11 more
09-21 15:10:04.033: I/Process(271): Sending signal. PID: 271 SIG: 9

chart.java

 public class Chart extends Activity 
 {      
    EditText edt1,edt2;
TextView txtv1;
Button btn;

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

    edt1 = (EditText)findViewById(R.id.editText1);
    edt2 = (EditText)findViewById(R.id.editText2);

    btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener()
    {

public void onClick(View v) 
{
    getTMSChart(edt1.getText().toString(),edt2.getText().toString());

    Intent intnt = new Intent(v.getContext(), BarGraphActivity.class);
            startActivity(intnt);
        }
    });
    }
public void getTMSChart(String FromDate, String ToDate) 
   {
    System.setProperty("http.keepAlive", "false");        
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);        

    envelope.dotNet = true;

    String METHOD = "GetTMSChart";
    String NAMESPACE = "http://tempuri.org/";
    String SOAP_ACTION = "http://tempuri.org/GetTMSChart"; 
    String URL = "http://54.251.60.177/TMSOrdersService/TMSDetails.asmx";

    SoapObject request = new SoapObject(NAMESPACE, METHOD); 

    request.addProperty("FromDate","");               
    request.addProperty("ToDate","");

    envelope.setOutputSoapObject(request);


    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try 
    {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapObject result = (SoapObject) envelope.bodyIn;
        SoapObject root =  (SoapObject) ((SoapObject)(result).getProperty(0)).getProperty("NewDataSet");
        int tablesCount = root.getPropertyCount();

    for (int i = 0; i < tablesCount; i++)
    {
        SoapObject table = (SoapObject) root.getProperty(i);
        int propertyCount = table.getPropertyCount();

     for (int j = 0; j < propertyCount; j++)
     {           
        //String ord = table.getPropertyAsString("");

         int orderNo = Integer.parseInt(table.getPropertyAsString("Order_No"));
         int freightRate = Integer.parseInt(table.getPropertyAsString("Freight_Rate"));
         int marginPercent =     Integer.parseInt(table.getPropertyAsString("Margin_Percent"));
        }
    }
}
catch (Exception e) 
{}
}   }

BarGraphActivity.java

public class BarGraphActivity extends Chart
{   
public void onCreate(Bundle savedInstanceState)  
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main1);
    DrawGraph();
   }
Chart ch = new Chart();


 public void DrawGraph() 
 {

String[] titles = new String[] { " Barcharts",""};

int[] x_axis =null;   
int[] y_axis =null;

List<int[]> values = new ArrayList<int[]>();
values.add(x_axis);
values.add(y_axis);

int[] colors = new int[] { Color.WHITE, Color.BLACK};

XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
renderer.setOrientation(Orientation.HORIZONTAL);
setChartSettings(renderer, "some texts", " ", " ",0,x_axis, 0,y_axis, Color.GRAY, Color.LTGRAY);

renderer.setXLabels(1);
renderer.addXTextLabel(2, "orderNo");
renderer.addYTextLabel(2, "freight");
renderer.setPanEnabled(false, false);

int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) 
{
  SimpleSeriesRenderer seriesRenderer = renderer.getSeriesRendererAt(i);
  seriesRenderer.setDisplayChartValues(true);
  }

    ChartFactory.getBarChartIntent(this, buildBarDataset(titles, values), renderer,Type.DEFAULT);
  }

public XYMultipleSeriesRenderer buildBarRenderer(int[] colors) 
{
    // creates a SeriesRenderer and initializes it with useful default values as well as colors

XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();

 renderer.setAxisTitleTextSize(15);
 renderer.setChartTitleTextSize(20);
 renderer.setLabelsTextSize(15);
 renderer.setLegendTextSize(15);

 int length = colors.length;
 for (int i = 0; i < length; i++) 
 {
   SimpleSeriesRenderer r = new SimpleSeriesRenderer();
   r.setColor(colors[i]);
   renderer.addSeriesRenderer(r);
    }
    return renderer;
   }

 public void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,String yTitle, int xMin, int[] x_axis, int yMin, int[] y_axis, int axesColor,int labelsColor) 
 {
    // sets lots of default values for this renderer

renderer.setChartTitle(title);

renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle);

renderer.setXAxisMin(xMin);

renderer.setYAxisMin(yMin);
renderer.setAxesColor(axesColor);
renderer.setLabelsColor(labelsColor);

renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.BLACK);
}

public XYMultipleSeriesDataset buildBarDataset(String[] titles, List<int[]> values) 
 {
    // adds the axis titles and values into the dataset

XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

int length = titles.length;

 for (int i = 0; i < length; i++) 
 {
   CategorySeries series = new CategorySeries(titles[i]);

   int[] v = values.get(i);

   int seriesLength = v.length;

   for (int k = 0; k < seriesLength; k++) 
   {
     series.add(v[k]);
    }

   dataset.addSeries(series.toXYSeries());
   }
   return dataset;
  } }

貴重な時間をありがとう!..

4

2 に答える 2

2

1- Web サービスから値を取得します。

これは棒グラフとはまったく関係ありません。Web サービスを呼び出して、必要な値を取得するだけです。

2- 値を取得したら、 achartengineを使用して棒グラフを作成できます。

編集:

ここであなたの更新を読んだときの私の一般的な考えです。

ではchart.java、Web サービスを呼び出して値をローカル変数に読み取っているため、これらの値はどこにも格納されていません。

ではBarGraphActivity.DrawGraph()x_axisy_axisは常にnullであるため、NullPointerException.

ソリューション:

最初のアクティビティで値を配列に収集intし、2 番目のアクティビティを開始するときにインテントで送信します。

後者では、配列を取得して に渡しますDrawGraph()

もう 1 つ注意:メイン スレッドで Web サービスを呼び出していますが、これはお勧めできません。代わりdoInBackground()に an のメソッドに移動する必要があります。AsyncTask

于 2012-09-21T09:39:49.793 に答える
0

私には悪いXMLのように見えます。あなたのパーサーはあなたにNullPointerException.

あなたの Android コードが SAX と DOM のどちらのパーサーを使用しているかわかりません。あなたが呼び出したサービスが XML をそのまま送り返したのか、それとも SOAP エンベロープにラップして送り返したのかはわかりません。SOAP エンベロープからペイロードを抽出する方法を知っている SOAP クライアントを使用しているかどうかはわかりません。データを取得したら、そのデータで何をしているのかわかりません。

しかし、あなたはすべきです。

于 2012-09-21T09:45:06.710 に答える