2017-10-01 14 views
2

アプリをオフにするとグラフからデータが失われました。どのように次の使用のためのデータと配列を保存するには?私はAndroidアプリのプログラミングでも新しいです。私はXYvaluesという名前のクラスを作成していましたので、混乱しないようにしてください。クラスは今私にとっては重要ではありません。Androidアプリケーションをオフにした後にデータが失われました

コード:

public class graph extends AppCompatActivity { 
private static final String TAG = "graph"; 
PointsGraphSeries<DataPoint> xySeries; 
private Button btnAddPt; 
private EditText mX,mY; 
GraphView mScatterPlot; 
private ArrayList <XYValues> xyValuesArray; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_graph); 
    btnAddPt = (Button) findViewById(R.id.BtnAddPt); 
    mX = (EditText) findViewById(R.id.numX); 
    mY = (EditText) findViewById(R.id.numY); 
    mScatterPlot = (GraphView) findViewById(R.id.scatterPlot); 
    xyValuesArray = new ArrayList<>(); 
    init(); 
} 
private void init() { 
    xySeries = new PointsGraphSeries<>(); 
    btnAddPt.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (!mX.getText().toString().equals("") && !mY.getText().toString().equals("")) { 
       double x = Double.parseDouble(mX.getText().toString()); 
       double y = Double.parseDouble(mY.getText().toString()); 
       Log.d(TAG, "onClick: Adding a new point. (x,y)(" + x + "," + y + ")"); 
       xyValuesArray.add(new XYValues(x, y)); 
       init(); 
      } else 


      { 
       toastMessage("You must fill both fields"); 
      } 
     } 


    }); 

    if (xyValuesArray.size() != 0) { 
     createScatterPlot(); 

    } else { 
     Log.d(TAG, "onCreate: No data to plot"); 

    } 
} 
private void createScatterPlot(){ 
    Log.d(TAG, "createScatterPlot:Creating scatter plot."); 
    xyValuesArray = sortArray(xyValuesArray); 
    for (int i =0; i<xyValuesArray.size();i++){ 
     try{ 
      double x = xyValuesArray.get(i).getX(); 
      double y = xyValuesArray.get(i).getY(); 
      xySeries.appendData(new DataPoint(x,y),true,1000); 

     }catch (IllegalArgumentException e){ 


      Log.e(TAG, "createScatterPlot:IllegalArgumentException: "+e.getMessage()); 
     } 
    } 
    xySeries.setShape(PointsGraphSeries.Shape.POINT); 
    xySeries.setColor(Color.BLUE); 
    xySeries.setSize(20f); 

    mScatterPlot.getViewport().setScalable(true); 
    mScatterPlot.getViewport().setScalableY(true); 
    mScatterPlot.getViewport().setScrollable(true); 
    mScatterPlot.getViewport().setScrollableY(true); 

    mScatterPlot.getViewport().setYAxisBoundsManual(true); 
    mScatterPlot.getViewport().setMaxY(250); 
    mScatterPlot.getViewport().setMinY(0); 

    mScatterPlot.getViewport().setXAxisBoundsManual(true); 
    mScatterPlot.getViewport().setMaxX(3000); 
    mScatterPlot.getViewport().setMinX(0); 

    mScatterPlot.addSeries(xySeries); 
} 

private ArrayList<XYValues> sortArray(ArrayList<XYValues>array){ 
    int factor = Integer.parseInt(String.valueOf(Math.round(Math.pow(array.size(),2)))); 
    int m = array.size() - 1; 
    int count =0; 
    Log.d(TAG,"sortArray:Sorting XYarray"); 
    while (true){ 
     m--; 
     if(m<=0){ 
      m=array.size()-1; 
     } 
     Log.d(TAG,"SortArray: m =" +m); 
     try{ 
      double tempY = array.get(m-1).getY(); 
      double tempX = array.get(m-1).getX(); 
      if (tempX>array.get(m).getX()){ 
       array.get(m-1).setY(array.get(m).getY()); 
       array.get(m).setY(tempY); 
       array.get(m-1).setX(array.get(m).getX()); 
       array.get(m).setX(tempX); 
      } 
      else if (tempX ==array.get(m).getX()){ 
       count++; 
       Log.d(TAG,"sortArray: count = "+count); 

      } 
      else if (array.get(m).getX()>array.get(m-1).getX()){ 
       count++; 
       Log.d(TAG,"sortArray: count = "+count); 
      } 
      if (count == factor){ 
       break; 
      } 
     }catch (ArrayIndexOutOfBoundsException e){ 
      Log.e(TAG,"sortArray: ArrayIndexOutBoundsException. Need more than 1 data to create plot = "+e.getMessage()); 
      break; 
     } 
    } 
    return array; 
} 
private void toastMessage (String message){ 
    Toast.makeText(this,message,Toast.LENGTH_SHORT).show(); 
} 

} 
+0

Preferences API(おそらくParcelable API)の使い方を学ぶ必要があります。あまり複雑ではありませんが、永続的なデータをAndroidに保存する必要がある場合は最小限です。 –

+0

このrealm.io/docs/java/latestについて少しは試してみてください。またはシリアル化を試してみてください。 – trip08

答えて

0

あなたは、あなたのアプリが閉じられる前に、グラフのデータを格納し、バックストレージにアプリが起動され、次回からのデータを読み込む必要があります。

どのようにデータを保存するかは、データの量によって異なります。

ほんの少しのデータの場合はPreference APIを使用することをおすすめします。

その他のストレージオプションはhereです。

+0

少し勉強してみてください。https://realm.io/docs/java/latest/ そのシンプルで高速です。 またはシリアル化を試してください。 – trip08

+0

@ trip08:別の回答への返信としてあなたのリンクを投稿することはできますが、その質問の下で質問作成者には向いていませんか? – halfer

関連する問題