开发者

Android Application Crashing When achartengine graph is called upon

开发者 https://www.devze.com 2023-03-28 08:40 出处:网络
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

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

 }


Add the the activity GraphicalActivity to the manifest file:

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

精彩评论

暂无评论...
验证码 换一张
取 消