0

在android中创建条形图时有没有人遇到过这种情况

我正在尝试使用 Achartengine 在 android 中创建条形图。但我实际上正在获取输入值,即。通过使用 Web 服务来获取x 和 y 轴值(用于创建条形图)

我的 logcat 是这样显示的。这是什么意思?

LOGCAT

11-10 14:45:37.483: W/KeyCharacterMap(421): No keyboard for id 0
11-10 14:45:37.483: W/KeyCharacterMap(421): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-10 14:45:44.044: D/AndroidRuntime(421): Shutting down VM
11-10 14:45:44.044: W/dalvikvm(421): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-10 14:45:44.054: E/AndroidRuntime(421): FATAL EXCEPTION: main
11-10 14:45:44.054: E/AndroidRuntime(421): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.xmlparsing_test/com.example.xmlparsing_test.BarGraphActivity}: java.lang.NullPointerException
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.os.Looper.loop(Looper.java:123)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-10 14:45:44.054: E/AndroidRuntime(421):  at java.lang.reflect.Method.invokeNative(Native Method)
11-10 14:45:44.054: E/AndroidRuntime(421):  at java.lang.reflect.Method.invoke(Method.java:521)
11-10 14:45:44.054: E/AndroidRuntime(421):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-10 14:45:44.054: E/AndroidRuntime(421):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-10 14:45:44.054: E/AndroidRuntime(421):  at dalvik.system.NativeStart.main(Native Method)
11-10 14:45:44.054: E/AndroidRuntime(421): Caused by: java.lang.NullPointerException
11-10 14:45:44.054: E/AndroidRuntime(421):  at com.example.xmlparsing_test.BarGraphActivity.buildBarDataset(BarGraphActivity.java:133)
11-10 14:45:44.054: E/AndroidRuntime(421):  at com.example.xmlparsing_test.BarGraphActivity.DrawGraph(BarGraphActivity.java:77)
11-10 14:45:44.054: E/AndroidRuntime(421):  at com.example.xmlparsing_test.BarGraphActivity.onCreate(BarGraphActivity.java:46)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-10 14:45:44.054: E/AndroidRuntime(421):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-10 14:45:44.054: E/AndroidRuntime(421):  ... 11 more
11-10 14:45:45.794: I/Process(421): Sending signal. PID: 421 SIG: 9

条形图活动.java

public class BarGraphActivity extends Chart 
{

int[] order,freight,margin;

int[] x_axis   = order;
int[] y_axis   = freight;
int[] mpercent = margin;

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main1);

    Bundle extras = getIntent().getExtras();
    if(extras != null)
    {   
        order   = extras.getIntArray("gotonextpage");
        freight = extras.getIntArray("gotonextpage");
        margin  = extras.getIntArray("gotonextpage");

    } else {}

    /*x_axis = new int[1];
    y_axis = new int[1];

    x_axis[0] = getIntent().getIntExtra("orderNo", 90);
    y_axis[0] = getIntent().getIntExtra("freightRate", 80);*/

    DrawGraph();
}

public void DrawGraph() 
{
    String[] titles = new String[] { " Barcharts", "" };
    List<int[]> values = new ArrayList<int[]>();

    values.add(order);
    values.add(freight);
    values.add(margin);

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

    XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
    renderer.setOrientation(Orientation.HORIZONTAL);

    setChartSettings(renderer, "some texts", " ", " ", 0, order, 0, freight, Color.RED, Color.LTGRAY);

    renderer.setXLabels(1);
    renderer.addXTextLabel(2, "orderNo");
    renderer.addYTextLabel(2, "freight");
    renderer.setPanEnabled(true, 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[] order2, int yMin, int[] freight2, 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;
    }
}

图表.java

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

String orderNo = "";
int freightRate = 0;
int marginPercent = 0;

@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);

            intnt.putExtra("orderNo", orderNo); 
            intnt.putExtra("freightRate", freightRate);
            intnt.putExtra("marginPercent", marginPercent);

            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", FromDate.trim());
    request.addProperty("ToDate", ToDate.trim());

    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);

            orderNo = table.getPropertyAsString("Order_No").replace("OR", "");
            freightRate = Integer.parseInt(table.getPropertyAsString("Freight_Rate"));
            marginPercent = Integer.parseInt(table.getPropertyAsString("Margin_Percent"));

        //  Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG).show();

        for(int j = 0; j < tablesCount; j++)
        {
            int ord,fre,marg;

            Bundle extras = getIntent().getExtras();

            if(extras!=null )
            {
                ord  = extras.getInt("gotonextpage");
                fre  = extras.getInt("gotonextpage");
                marg = extras.getInt("gotonextpage");
                }

            else{}
            }   
        }
    }
catch (Exception e) 
{
    Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    e.printStackTrace();
    }
}}
4

1 回答 1

1

您没有正确阅读额外的意图。这只是一个问题。还有很多其他的错误。

您使用此代码添加了额外的意图:

intnt.putExtra("orderNo", orderNo); 
intnt.putExtra("freightRate", freightRate);
intnt.putExtra("marginPercent", marginPercent);

你得到它们:

order   = extras.getIntArray("gotonextpage");
freight = extras.getIntArray("gotonextpage");
margin  = extras.getIntArray("gotonextpage");

键和类型都错了。

您正在通过这些变量将额外的数据传递给意图:

String orderNo = "";
int freightRate = 0;
int marginPercent = 0;

要将其存储在您使用的目标活动中

int[] order,freight,margin;

为什么?

于 2012-11-10T10:27:06.630 回答