2013-03-09 5 views
-1
public class MainActivity extends Activity implements OnTouchListener { 
private float x; 
private float y; 
Rect clearButton = new Rect(300,570,400,620); 
Rect resultsButton = new Rect(900,570,1000,620); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    MyCustomPanel view = new MyCustomPanel(this); 

    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, 
    LayoutParams.MATCH_PARENT); 
    addContentView(view, params); 
    view.setOnTouchListener(this); 

} 
private class MyCustomPanel extends View { 

    public MyCustomPanel(Context context) { 
     super(context); 

    }@Override 
    public void draw(Canvas canvas) { 

     Paint paint = new Paint(); 
     paint.setColor(Color.RED); 
     canvas.drawCircle(x, y, 5, paint); 
     canvas.drawRect(clearButton, paint); 
     canvas.drawRect(resultsButton, paint); 
    } 
} 
public boolean onTouch(View v, MotionEvent event) { 
    x = event.getX(); 
    y = event.getY(); 
    if (clearButton.contains((int)x,(int) y)){ 
     deleteFile("recordResults.txt"); 
    } 
    else if (resultsButton.contains((int) x, (int) y)) { 
      try{ 
       FileInputStream fis = openFileInput("recordResults.txt"); 

       InputStreamReader isr = new InputStreamReader(fis); 
       BufferedReader br = new BufferedReader(isr); 
       StringBuilder results = new StringBuilder(); 
       String resultsToFile; 
       String line; 
       while((line = br.readLine()) != null){ 
        results.append(line); 
       } 
       resultsToFile = results.toString(); 
       String root = Environment.getExternalStorageDirectory().getAbsolutePath() + "/results.txt"; 
       FileOutputStream fos = openFileOutput(root, MODE_APPEND); 
       OutputStreamWriter osw = new OutputStreamWriter(fos); 
       osw.write(resultsToFile); 
       osw.flush(); 
       osw.close(); 
      } 
      catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
    } 
    else{ 

     try { 
      printToFile(x, y); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    v.invalidate(); 
    return true; 
} 
public void printToFile(Float x, Float y) throws IOException { 

    final String record = new String("x:" + String.valueOf(x) + ", y:" + String.valueOf(y)); 
    FileOutputStream fos = openFileOutput("recordResults.txt", MODE_APPEND); 
    OutputStreamWriter osw = new OutputStreamWriter(fos); 
    osw.write(record); 
    osw.flush(); 
    osw.close(); 

} 

} 

У меня есть этот код, и я пытаюсь скопировать файл, созданный в другое место. Каждый раз, когда я нажимаю кнопку resultButton Rect, он перестает работать. Почему это? Есть ли лучший способ сделать это? Благодаря!Перенос одного файла на другой в Android?

Edit (LogCat):

03-09 08:07:44.139: W/System.err(841): java.io.FileNotFoundException: /data/data/com.example.recordresults/files/recordResults.txt: open failed: ENOENT (No such file or directory) 
03-09 08:07:44.239: W/System.err(841): at com.example.recordresults.MainActivity.onTouch(MainActivity.java:74) 
03-09 08:07:44.508: W/System.err(841): java.io.FileNotFoundException: /data/data/com.example.recordresults/files/recordResults.txt: open failed: ENOENT (No such file or directory) 
03-09 08:07:44.553: W/System.err(841): at com.example.recordresults.MainActivity.onTouch(MainActivity.java:74) 
03-09 08:07:54.369: E/MessageQueue-JNI(841): at com.example.recordresults.MainActivity.onTouch(MainActivity.java:86) 
03-09 08:07:54.429: E/AndroidRuntime(841): at com.example.recordresults.MainActivity.onTouch(MainActivity.java:86) 
+0

'он перестает работать'. Что вы имеете в виду? Что именно происходит? – Simon

+0

Мое устройство говорит, что к сожалению RecordResults перестает работать. – Clarissa

+0

Так что, пожалуйста, разместите трассировку стека из logcat. Только соответствующие строки, пожалуйста. – Simon

ответ

0

Вы, вероятно, нужно разрешение на запись для записи файла.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Также это a duplicated question.

+0

У меня уже есть это в моем манифесте. – Clarissa

+0

Затем, возможно, вы можете проверить, что ваш 'printToFile()' когда-либо вызывается простым отладочным кодом, и что в вашем логарифме нет соответствующих исключений. – PCoder

+0

И вы не должны делать [перекрестные ссылки] (http://stackoverflow.com/questions/15082020/android-wont-create-a-file-or-append-to-it) на сайте. – PCoder

Смежные вопросы