调用图表引擎图表时 Android 应用程序崩溃

发布于 2024-11-30 02:24:17 字数 6132 浏览 1 评论 0原文

我编写了一个解决二次方程的练习应用程序,现在我希望可以选择使用按钮来绘制它们的图表。然而,当我按下按钮时,应用程序崩溃了。这是主程序和图形程序的代码(位于下面): 主类:*注意:我确实导入了必要的类和 .jar。

package com.test.quad;
import java.text.DecimalFormat;


import java.util.List;
import android.util.Log;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import android.view.View;


import android.widget.Button;
import android.widget.EditText;


import android.widget.TextView;

public class QuadraticActivity extends Activity  {
Button reset;
Button solve;
Button grapher;
TextView labela1;
TextView b1label;
TextView c1label;
TextView result1;
TextView result2;
EditText a1;
EditText b1;
EditText c1;
public List<double[]> x,y;
public double a, b, c;
public double xStart = 0, xEnd = 0;
public double xCurrent;
double yCurrent;
public double xStep;
public int count = 100;
Graph g = new Graph();


/** Called when the activity is first created. */

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




    labela1 = (TextView)this.findViewById(R.id.labela1);
    b1label = (TextView)this.findViewById(R.id.b1label);
    c1label = (TextView)this.findViewById(R.id.c1label);
    result1 = (TextView)this.findViewById(R.id.result1);
    result2 = (TextView)this.findViewById(R.id.result2);

    a1 = (EditText)this.findViewById(R.id.a1);
    b1 = (EditText)this.findViewById(R.id.b1);
    c1 = (EditText)this.findViewById(R.id.c1);

    solve = (Button)this.findViewById(R.id.solve);


    reset = (Button)this.findViewById(R.id.reset);


    grapher = (Button)this.findViewById(R.id.grapher);
    }
    public void onClickHandler(View v) {
    switch(v.getId()){

    case R.id.reset:
        a1.setText("");
        b1.setText("");
        c1.setText("");
        result1.setText("");
        result2.setText("");
        a=0;
        b=0;
        c=0;
    break;
    case R.id.solve:
        solveEquation();
    break;

    case R.id.grapher:
     Intent achartIntent = new Graph().execute(this);

         startActivity(achartIntent);
         Log.d("debug", "clicked" );
    break;
    }



   }

  protected void solveEquation() {

      try{
         a = Double.parseDouble(a1.getText().toString());
         b = Double.parseDouble(b1.getText().toString());
         c = Double.parseDouble(c1.getText().toString());
     }
        catch (NumberFormatException exception) {
            result1.setText("Please enter a number");
            result2.setText(" ");
        }
    finally{}



    if (a==0 && b==0 && c==0){
        result1.setText(" ");
        result2.setText(" ");
    }
    else{
    double  yy, xx,x1, x2, x3;
    double disc = (( b * b) - (4 * a * c));

    DecimalFormat fmt = new DecimalFormat("0.###");

    if (disc > 0){
        double solution1 = ((-1 * b) - Math.sqrt(disc)) / ( 2 * a);
        double solution2 = ((-1 * b) + Math.sqrt(disc)) / (2 * a);
        result1.setText("Solution #1: " + fmt.format(solution1));
        result2.setText("Solution #2: " + fmt.format(solution2));

        if (solution1 < solution2){
            xStart = solution1 - 5;
               xEnd = solution2 + 5; 
        }
        else{
             xStart = solution2 - 5;
               xEnd = solution1 + 5; 
        }
    }
    else if (disc == 0){
        double oneSol = (-1 * b) / ( 2 * a);
        result1.setText("One Solution: " + fmt.format(oneSol));
        result2.setText("");
        xStart = oneSol - 5;
        xEnd = oneSol + 5;
    }
    else{
        yy = (-1 * b) / (2 * a);
        xx = ((b * b) - (4 * a * c));
        x1 = Math.abs(xx);
        x2 = Math.sqrt(x1);
        x3 = (x2) / (2 * a);
        result1.setText("Imaginary Solution #1: " + fmt.format(yy) + " - " +  
             fmt.format(x3)+"i" );                                                                               
        result2.setText("Imaginary Solution #2: " + fmt.format(yy) + " + " +  
             fmt.format(x3)+"i" );
        xStart = (((-1 * b) - (x2)) / ( 2 * a)) - 5;
        xEnd = (((-1 * b) + (x2)) / (2 * a)) + 5;
       }


     }
    }

   }

和图形代码:

package com.test.quad;
import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
 import org.achartengine.renderer.XYMultipleSeriesRenderer;

 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;

 /**
  * Quadratic
  */
  public class Graph extends AbstractDemoChart {
  /**
 * Returns the chart name.
 * @return the chart name
 */
  public String getName() {
  return "Quadratic Functions";
 }

 /**
  * Returns the chart description.
  * @return the chart description
  */
  public String getDesc() {
  return "Quadratic Graph";
 }

 /**
 * Executes the chart demo.
 * @param context the context
 * @return the built intent
 */
  public Intent execute(Context context) {
  String[] titles = new String[] { "Function" };
 List<double[]> x = new ArrayList<double[]>();
 List<double[]> values = new ArrayList<double[]>();
 QuadraticActivity c = new QuadraticActivity();

  double range = c.xEnd - c.xStart;
  double step = .01 * range;
  int count = 110;
  double xCurrent = c.xStart;
  double[] xValueArr = new double[count];
  double[] yValueArr = new double[count];
 values.add(xValueArr);
 values.add(yValueArr);

 for (int ii=0; xCurrent <= c.xEnd; xCurrent += step, ii++) {
    double yCurrent = (c.a)*Math.pow(xCurrent, 2) + (c.b)*xCurrent + (c.c);
    xValueArr[ii] = xCurrent;
    yValueArr[ii] = yCurrent;

 }
 System.out.println(x);
 int [] colors = new int[] { Color.BLUE };
 PointStyle[] styles = new PointStyle[] { PointStyle.POINT };
 XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
 setChartSettings(renderer, "Graph of Quadratic Equation", "X", "Y", 0, 360, -1, 1,
     Color.GRAY, Color.LTGRAY);
 renderer.setXLabels(20);
 renderer.setYLabels(10);
 return ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values),
 renderer);    
 }

 }

I wrote a practice app that solves quadratic equations and now I want to have the option to graph them with a button. Yet when I press the button the application crashes. Here is the code for the main program and the graphing one(located beneath):
Main class: *note: I do have the necessary classes imported and the .jar.

package com.test.quad;
import java.text.DecimalFormat;


import java.util.List;
import android.util.Log;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import android.view.View;


import android.widget.Button;
import android.widget.EditText;


import android.widget.TextView;

public class QuadraticActivity extends Activity  {
Button reset;
Button solve;
Button grapher;
TextView labela1;
TextView b1label;
TextView c1label;
TextView result1;
TextView result2;
EditText a1;
EditText b1;
EditText c1;
public List<double[]> x,y;
public double a, b, c;
public double xStart = 0, xEnd = 0;
public double xCurrent;
double yCurrent;
public double xStep;
public int count = 100;
Graph g = new Graph();


/** Called when the activity is first created. */

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




    labela1 = (TextView)this.findViewById(R.id.labela1);
    b1label = (TextView)this.findViewById(R.id.b1label);
    c1label = (TextView)this.findViewById(R.id.c1label);
    result1 = (TextView)this.findViewById(R.id.result1);
    result2 = (TextView)this.findViewById(R.id.result2);

    a1 = (EditText)this.findViewById(R.id.a1);
    b1 = (EditText)this.findViewById(R.id.b1);
    c1 = (EditText)this.findViewById(R.id.c1);

    solve = (Button)this.findViewById(R.id.solve);


    reset = (Button)this.findViewById(R.id.reset);


    grapher = (Button)this.findViewById(R.id.grapher);
    }
    public void onClickHandler(View v) {
    switch(v.getId()){

    case R.id.reset:
        a1.setText("");
        b1.setText("");
        c1.setText("");
        result1.setText("");
        result2.setText("");
        a=0;
        b=0;
        c=0;
    break;
    case R.id.solve:
        solveEquation();
    break;

    case R.id.grapher:
     Intent achartIntent = new Graph().execute(this);

         startActivity(achartIntent);
         Log.d("debug", "clicked" );
    break;
    }



   }

  protected void solveEquation() {

      try{
         a = Double.parseDouble(a1.getText().toString());
         b = Double.parseDouble(b1.getText().toString());
         c = Double.parseDouble(c1.getText().toString());
     }
        catch (NumberFormatException exception) {
            result1.setText("Please enter a number");
            result2.setText(" ");
        }
    finally{}



    if (a==0 && b==0 && c==0){
        result1.setText(" ");
        result2.setText(" ");
    }
    else{
    double  yy, xx,x1, x2, x3;
    double disc = (( b * b) - (4 * a * c));

    DecimalFormat fmt = new DecimalFormat("0.###");

    if (disc > 0){
        double solution1 = ((-1 * b) - Math.sqrt(disc)) / ( 2 * a);
        double solution2 = ((-1 * b) + Math.sqrt(disc)) / (2 * a);
        result1.setText("Solution #1: " + fmt.format(solution1));
        result2.setText("Solution #2: " + fmt.format(solution2));

        if (solution1 < solution2){
            xStart = solution1 - 5;
               xEnd = solution2 + 5; 
        }
        else{
             xStart = solution2 - 5;
               xEnd = solution1 + 5; 
        }
    }
    else if (disc == 0){
        double oneSol = (-1 * b) / ( 2 * a);
        result1.setText("One Solution: " + fmt.format(oneSol));
        result2.setText("");
        xStart = oneSol - 5;
        xEnd = oneSol + 5;
    }
    else{
        yy = (-1 * b) / (2 * a);
        xx = ((b * b) - (4 * a * c));
        x1 = Math.abs(xx);
        x2 = Math.sqrt(x1);
        x3 = (x2) / (2 * a);
        result1.setText("Imaginary Solution #1: " + fmt.format(yy) + " - " +  
             fmt.format(x3)+"i" );                                                                               
        result2.setText("Imaginary Solution #2: " + fmt.format(yy) + " + " +  
             fmt.format(x3)+"i" );
        xStart = (((-1 * b) - (x2)) / ( 2 * a)) - 5;
        xEnd = (((-1 * b) + (x2)) / (2 * a)) + 5;
       }


     }
    }

   }

and the graph code:

package com.test.quad;
import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
 import org.achartengine.renderer.XYMultipleSeriesRenderer;

 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;

 /**
  * Quadratic
  */
  public class Graph extends AbstractDemoChart {
  /**
 * Returns the chart name.
 * @return the chart name
 */
  public String getName() {
  return "Quadratic Functions";
 }

 /**
  * Returns the chart description.
  * @return the chart description
  */
  public String getDesc() {
  return "Quadratic Graph";
 }

 /**
 * Executes the chart demo.
 * @param context the context
 * @return the built intent
 */
  public Intent execute(Context context) {
  String[] titles = new String[] { "Function" };
 List<double[]> x = new ArrayList<double[]>();
 List<double[]> values = new ArrayList<double[]>();
 QuadraticActivity c = new QuadraticActivity();

  double range = c.xEnd - c.xStart;
  double step = .01 * range;
  int count = 110;
  double xCurrent = c.xStart;
  double[] xValueArr = new double[count];
  double[] yValueArr = new double[count];
 values.add(xValueArr);
 values.add(yValueArr);

 for (int ii=0; xCurrent <= c.xEnd; xCurrent += step, ii++) {
    double yCurrent = (c.a)*Math.pow(xCurrent, 2) + (c.b)*xCurrent + (c.c);
    xValueArr[ii] = xCurrent;
    yValueArr[ii] = yCurrent;

 }
 System.out.println(x);
 int [] colors = new int[] { Color.BLUE };
 PointStyle[] styles = new PointStyle[] { PointStyle.POINT };
 XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
 setChartSettings(renderer, "Graph of Quadratic Equation", "X", "Y", 0, 360, -1, 1,
     Color.GRAY, Color.LTGRAY);
 renderer.setXLabels(20);
 renderer.setYLabels(10);
 return ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values),
 renderer);    
 }

 }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

权谋诡计 2024-12-07 02:24:17

将活动 GraphicalActivity 添加到清单文件中:

<activity android:name="org.achartengine.GraphicalActivity" />

Add the the activity GraphicalActivity to the manifest file:

<activity android:name="org.achartengine.GraphicalActivity" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文