0

編集テキストから入力を取得してリストに保存するアクティビティがあります。

現在の日付もリストに保存します。

次に、上記を保存する保存ボタンを押します。

翌日、ユーザーはさらにデータを入力して保存します。

x 軸の日付形式と y 軸にユーザーが入力した値を使用してプロットを作成したいと考えています。

ある活動では、次のことを行っています。

...
String filename = "data.csv";    
List<Double> mydata=new ArrayList<Double>();
List<Date> mydate=new ArrayList<Date>();

....value=(EditText) findViewById(R.id.enter_data);
...
switch (v.getId()){
        case R.id.savebtn:
            savefunc();

            break;
        case R.id.graphicsbtn: 

            Intent i = new Intent();        
            i.setClassName(this,LineGraph.class.getName());                 
            this.startActivity(i);  
            break;

   public void savefunc(){

    SimpleDateFormat thedate = new SimpleDateFormat("dd/MM/yyyy"); 
    Date d=new Date();
    try{
     d=thedate.parse(filename);
    mydate.add(d);
    }
    catch  (ParseException e){
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    double thedata=Double.parseDouble(value.getText().toString().trim());
    mydata.add(thedata);
..
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
    for (int i=0;i<mydate.size();i++){
       bw.write(mydate.get(i)+","+mydata.get(i)+"\n");
   ...

LineGraph アクティビティで:

public class LineGraph extends Activity {


    private static List<Date> date = new ArrayList<Date>();
private static List<Double> data = new ArrayList<Double>();

    public Intent getIntent(Context context){

           readfunc();

      TimeSeries series = new TimeSeries("Showing data");
    for (int i=0;i<date.size();i++){    
        series.add(date.get(i),data.get(i));    

    }

読み取り機能:

public void readfunc(){

    SimpleDateFormat thedate = new SimpleDateFormat("dd/MM/yyyy"); 
    Date d=new Date();
    try{
     d=thedate.parse(filename);
    }
    catch.. 
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

         do {
             s = br.readLine();     
             if (s != null ){
                 String[] splitLine = s.split(",");
                 date.add(d);//Double.parseDouble(splitLine[0]));
                 data.add(Double.parseDouble(splitLine[1]));

私はこれらの問題を抱えています:

1) 受信したファイルが空です (ファイルの保存と読み取りの方法が機能するため、日付に問題があります)。

2) グラフ画面に白い背景が表示されます (もちろんファイルが空なのでデータはありません) が、なぜ白い背景なのでしょうか? 同じコードを別の目的で使用していて、白い背景が表示されません。

3) x 軸で Dates を使用する方法がわかりません。List を使用する必要がありますか? リスト ? .

- - - - - - - - - - - - アップデート - - - - - - - - - - - - - --------------------------------

わかりました、ついに!(ユーザー「Dan」の提案の後)

使ったChartFactory.getTimeChartView(this, dataset, mRenderer,"dd/MM/yyyy");

それ以外のChartFactory.getLineChartIntent(context, dataset, mRenderer,"dd/MM/yyyy");

String List を使用する必要はなく、 Date List だけを使用する必要があります

4

2 に答える 2

2

ファイルを処理するコードは、次のようにする必要があります (コンパイルされていません)。

public void savefunc(){
    List<String> myDate = new ArrayList<String>(); //To store the formatted dates
    SimpleDateFormat thedate = new SimpleDateFormat("dd/MM/yyyy"); 
    Date d=new Date(); //the current date
    String sd = thedate.format(d); // sd contains "16/04/2013", the formatted date
    myDate.add(sd);

    double thedata=Double.parseDouble(value.getText().toString().trim());
    mydata.add(thedata);
    ...
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
    for (int i=0;i<mydate.size();i++){
       bw.write(mydate.get(i)+","+mydata.get(i)+"\n");
    }
}


public void readfunc(){

    SimpleDateFormat thedate = new SimpleDateFormat("dd/MM/yyyy"); 
    Date d;
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

    do {
        s = br.readLine();     
        if (s != null ){
            String[] splitLine = s.split(","); //first substring is the formatted date
            date.add(thedate.parse(splitLine[0])); //do something with exception
            data.add(Double.parseDouble(splitLine[1]));
...

それが役に立てば幸い。

于 2013-04-16T22:21:25.643 に答える
0

動的プロットの場合は、intent:: ではなく GraphicalView を使用します。

 public GraphicalView mChartView;

xml を作成::

<RelativeLayout 
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout
    android:id="@+id/graph"
    android:layout_width="fill_parent"
    android:layout_height="145dip" >

  </LinearLayout>
</RelativeLayout> 

次にウルコードで:

 LinearLayout layout = (LinearLayout) findViewById(R.id.graph);
 mChartView = ChartFactory.mChartView = ChartFactory.getLineChartView(getBaseContext(), dataset, renderer)
 layout.addView(mChartView); 
  • 右の編集テキスト フィールドから読み取った値を入力した後:

  • 次に、それぞれの配列リストに追加する新しい値を渡します

  • 次に、新しい値を追加した後に linegraph のコードを再度呼び出し、配列リストを読み取る前にシリーズをクリアすることを忘れないでください (つまりdataset.clear();)。ラインコード関数が先頭に追加されたら、dataset.clear(); を追加します。データをクリアしないとオーバーラップし、例外や線が古いデータで太く見える可能性があるため...

mChartView.repaint();次に、グラフをリフレッシュするために呼び出します

これらのリンクも役立ちますlink1 link2

于 2013-04-15T13:05:14.390 に答える