-1

私はAndroidとJAVAに非常に慣れていません。自分でAndroidアプリの作成を学ぼうとしています。csv ファイルから値を読み取ってプロットしようとしたときに問題が発生しました。具体的には、Androidplot の例を変更しようとしていました。

元の Androidplot の例は機能しますが、変更したものは機能しません...問題を見つけようとしましたが、失敗しました...コードをデバッグしようとするたびに、ActivityThread.java が飛び出し、小さな矢印が表示されます次のコードを指しています。

catch (Exception e) {
        if (!mInstrumentation.onException(activity, e)) {
            throw new RuntimeException(
                "Unable to start activity " + component
                + ": " + e.toString(), e);
        }
    }

問題が実際に何であるかを誰か教えてもらえますか? どんな助けでも大歓迎です=)

以下は私の変更されたコードです:

package edu.ius.rwisman.AndroidPlotExample;

import android.app.Activity;  

import android.graphics.Color;
import android.os.Bundle;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.series.XYSeries;
import com.androidplot.xy.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Arrays;


public class AndroidPlotExampleActivity extends Activity
{

private XYPlot mySimpleXYPlot;

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

    // Initialize our XYPlot reference:
    mySimpleXYPlot = (XYPlot) findViewById(R.id.mySimpleXYPlot);
    Number[] series1Numbers = null;
    Number[] series2Numbers = null;
    int row = 0;
    // Create two arrays of y-values to plot:
    try {

        File file = new File("/home/hanrui/workspace/table.csv");
        BufferedReader reader = new BufferedReader(new FileReader(file));
        reader.readLine();
        String line = null;
        while((line=reader.readLine())!=null&&row<24){
            String item[] = line.split(",");

            String last = item[item.length-1];
            int value = Integer.parseInt(last);
            series1Numbers[row] = value;
            series2Numbers[row] = value;
            row++;
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



    // Turn the above arrays into XYSeries:
    XYSeries series1 = new SimpleXYSeries(
            Arrays.asList(series1Numbers),          // SimpleXYSeries takes a List so turn our array into a List
            SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, // Y_VALS_ONLY means use the element index as the x value
            "Series1");                             // Set the display title of the series

    // Same as above, for series2
    XYSeries series2 = new SimpleXYSeries(Arrays.asList(series2Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, 
            "Series2");

    // Create a formatter to use for drawing a series using LineAndPointRenderer:
    LineAndPointFormatter series1Format = new LineAndPointFormatter(
            Color.rgb(0, 200, 0),                   // line color
            Color.rgb(0, 100, 0),                   // point color
            Color.rgb(150, 190, 150));              // fill color (optional)

    // Add series1 to the xyplot:
    mySimpleXYPlot.addSeries(series1, series1Format);

    // Same as above, with series2:
    mySimpleXYPlot.addSeries(series2, new LineAndPointFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 0, 100),
            Color.rgb(150, 150, 190)));


    // Reduce the number of range labels
    mySimpleXYPlot.setTicksPerRangeLabel(3);

    // By default, AndroidPlot displays developer guides to aid in laying out your plot.
    // To get rid of them call disableAllMarkup():
    mySimpleXYPlot.disableAllMarkup();
}
}
4

1 に答える 1

0

Androidアプリケーションを実行する場合、電話(エミュレーターまたは実際のデバイス自体)で実行されるため、このファイルはほとんど見つかりません。

File file = new File("/home/hanrui/workspace/table.csv");

series1Numberstry-catch-statementの後で、 nullに等しいかどうかを確認します。

編集:

何かに気づきました。Numberの配列を初期化することはありません。

Number[] series1Numbers = null;

JavaはPHPではありません。PHPでは配列が直接作成されますが、Javaではそうではありません。配列のサイズはseries1Numbers = new Number[10];どこにあるかを呼び出す必要があります。10代わりにArrayListを使用することをお勧めします。これは、動的なサイズになる可能性があるためです。

于 2012-06-06T20:51:32.217 に答える