2013-07-23 2 views
0

내 프로그램은 SD 메모리 및 그래픽에 저장된 txt 파일에서 데이터를 읽습니다. 하지만 그것은 한 번만 프로세스를 만들고 다른 txt를 선택하고 그래프 버튼을 다시 누르면 작동하지 않습니다. 선택한 파일에 EsFileExplorer를 사용합니다. 찾을 수있는 제안이나 오류가 있습니까?achartengine에서 그래프로 표시 할 때의 문제

XML은 다음과 같습니다

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

<LinearLayout 
    android:id="@+id/chart" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.37" 
    android:orientation="vertical" > 

</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.01" > 

    <Button 
     android:id="@+id/btnGraficar" 
     android:layout_width="140dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Graficar" /> 

    <Button 
     android:id="@+id/btnOpen" 
     android:layout_width="156dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.54" 
     android:text="Abrir Archivo" /> 

</LinearLayout> 

<EditText 
    android:id="@+id/etFilePath" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:focusable="false" 
    android:hint="Nombre del Archivo" > 

    <requestFocus /> 
</EditText> 

활동이

public class LineChart extends Activity { 
public static final String TYPE = "type"; 
private static final String TAG = "MSG"; 

protected static final int REQUEST_CODE_PICK_FILE_TO_OPEN = 1; 


private XYMultipleSeriesDataset mDataset; 
private XYMultipleSeriesRenderer mRenderer = getDemoRenderer(); 
private GraphicalView mChartView; 

private Button btnGraficar; 
private Button btnSeleccionarArchivo; 
private EditText txtArchivo; 

@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_line_chart); 
    Log.v(TAG, "Inicio"); 



    btnGraficar = (Button) findViewById(R.id.btnGraficar); 
    btnSeleccionarArchivo = (Button) findViewById(R.id.btnOpen); 
    txtArchivo = (EditText) findViewById(R.id.etFilePath); 

    btnGraficar.setEnabled(false); 
    btnGraficar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      generarGrafica(); 
     } 



    }); 



    btnSeleccionarArchivo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      openFile(); 
     } 
    }); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

if (resultCode != RESULT_OK || data == null) { 
     return ; 
    } 


    Uri uri = data.getData(); 

    if(uri.toString().length() > 0){ 
     switch (requestCode) { 
      case REQUEST_CODE_PICK_FILE_TO_OPEN: 
       // obtain the filename 
       if (uri != null) { 
        txtArchivo.setText(uri.getPath()); 
        Toast.makeText(this, getString(R.string.open_message) + " " + uri.getPath(), 0).show(); 
       }  
       break; 

     } 


     btnGraficar.setEnabled(true); 

    } 
} 




private void openFile(){ 
    try{ 
     Intent intent = getIntent("com.estrongs.action.PICK_FILE",getString(R.string.open_button)); 
     startActivityForResult(intent, REQUEST_CODE_PICK_FILE_TO_OPEN); 
    } catch (ActivityNotFoundException e) { 
     //Toast.makeText(this, R.string.no_filemanager_installed, 0).show(); 
    } 
} 

private Intent getIntent(String action,String btnTitle){ 

    Intent intent = new Intent(action); 

    if (btnTitle != null) 
     intent.putExtra("com.estrongs.intent.extra.BUTTON_TITLE", btnTitle); 

    return intent ; 
} 


private void generarGrafica(){ 
    setRendererStyling(); 


    mDataset = getDemoDataset(); 

    if (mChartView == null) { 
     LinearLayout layout = (LinearLayout) findViewById(R.id.chart); 
     mChartView = ChartFactory.getLineChartView(this, mDataset, 
       mRenderer); 
     mRenderer.setSelectableBuffer(100); 
     layout.addView(mChartView, new LayoutParams(
       LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    } 
     else 
     mChartView.repaint(); 
    } 

private void setRendererStyling() { 

    mRenderer.setAxisTitleTextSize(16); 
    mRenderer.setChartTitleTextSize(20); 
    mRenderer.setXLabels(30); 
    mRenderer.setYLabels(30); 
    mRenderer.setLabelsTextSize(20); 
    mRenderer.setLegendTextSize(20); 
    mRenderer.setXTitle("Tiempo"); 
    mRenderer.setYTitle("Amplitud"); 
    mRenderer.setMargins(new int[] { 20, 30, 15, 0 }); 
    mRenderer.setZoomButtonsVisible(true); 
    mRenderer.setPointSize(20); 
    mRenderer.setShowGrid(true); 
    mRenderer.setGridColor(Color.BLACK); 


} 


private XYMultipleSeriesDataset getDemoDataset() 
{ 
    String archivo = txtArchivo.getText().toString(); 
    ReadFileSDCardActivity r = new ReadFileSDCardActivity(archivo); 
    Log.v(TAG, "Leyo los datos"); 


    double[] seriesFirstY = r.getArreglo(); 

    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 

    XYSeries firstSeries = new XYSeries("ECG 1"); 
    for (int i = 0; i < seriesFirstY.length ; i++) 
     firstSeries.add(i, seriesFirstY[i]); 
    dataset.addSeries(firstSeries); 
    Log.v(TAG, "creo el data set"); 


    return dataset; 
} 

private XYMultipleSeriesRenderer getDemoRenderer() { 
    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 
    renderer.setMargins(new int[] { 20, 30, 15, 0 }); 
    XYSeriesRenderer r = new XYSeriesRenderer(); 
    r.setColor(Color.BLUE); 
    //r.setPointStyle(PointStyle.POINT); 

    r.setFillPoints(true); 

    // r.setDisplayChartValues(true);// Que despliegue los numeros 
    // r.setChartValuesTextSize(25); //Tamaño de los numeros 
    renderer.addSeriesRenderer(r); 
    /* r = new XYSeriesRenderer(); 
    r.setPointStyle(PointStyle.POINT); 
    r.setColor(Color.RED); 
    r.setDisplayChartValues(true); 
    r.setChartValuesTextSize(30); 
    r.setFillPoints(true); 
    renderer.addSeriesRenderer(r);*/ 
    renderer.setAxesColor(Color.GRAY); 
    renderer.setLabelsColor(Color.GREEN); 
    Log.v(TAG, "Creo el render"); 

    return renderer; 
} 

}

및 TXT 파일에서 데이터를 읽을 수있는 활동입니다

public class ReadFileSDCardActivity { 

public ArrayList<Double> arreglo = new ArrayList<Double>(); 
int contador= 0; 


public ReadFileSDCardActivity(String archivo) 
{ 


    File file = new File(archivo); 

    if(file.exists()) // check if file exist 
    { 
      //Read text from file 
     StringBuilder text = new StringBuilder(); 

     try 
     { 

      BufferedReader br = new BufferedReader(new FileReader(file)); 
      String line; 


      while ((line = br.readLine()) != null) 
      { 
       arreglo.add(Double.parseDouble(line)); 
       // text.append(line); 
       //text.append("\n"+ "," + line); 
       contador++; 
      } 

     } 
     catch (IOException e) 
     { 
      //You'll need to add proper error handling here 
     } 
     //Set the text 
     // tv.setText(text); 

    } 
    else 
    { 
     //tv.setText("Sorry file doesn't exist!!"); 
    } 

} 

public double[] getArreglo() { 
    // TODO Auto-generated method stub 
    double[] arreglo1 = new double[arreglo.size()]; 
    for(int i=0 ; i<arreglo.size();i++) 
    { 
     arreglo1[i]= arreglo.get(i); 
// text.append("\n"+ "," + contador); 
    } 

    return arreglo1; 
} 
    } 

답변

0

모든 버튼을 누를 때마다 getDemoDataset()으로 전화를 걸고 있습니다. 즉, 새 dataset을 만들었지 만 그래프에 새로운 dataset을 만들었다 고 말하면 안됩니다.

두 번째 단추에서를 누르면 기존의 dataset을 다시 사용하고 아무 곳이나 사용하지 않는 새 인스턴스를 만드는 대신 내용을 수정하는 것이 좋습니다.

관련 문제