2013-09-30 31 views
1

*由于将数据写入文件的问题导致最近几天停滞不前。我正在从设计的相机应用中捕捉图像。我正在尝试将图像点击到csv文件上的时间戳值写入。我能够正确生成并将.csv和图像文件存储到sd卡上,但是当它将时间戳数据写入csv文件时,我注意到.csv文件是空的。 有人可以帮我解决这个问题。我附上代码以供参考。 谢谢。无法将数据写入android中的保存文件

public class CameraActivity extends Activity { 
private static final String LOG_TAG = "CameraActivity.java"; 
private static final int IMAGE_CAPTURE = 0; 
File fileName; 
PrintWriter captureFile; 
double timeStamp = 0; 
int x = 1; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera); 
    try { 
     // intent to start device camera 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     // you can also create your own filename or path 
     String fileN = "camera_app"; 
     //String fileName = String.valueOf(System.currentTimeMillis()); 
     // where do you want to save the images 
     String path = Environment.getExternalStorageDirectory() + "/" 
       + fileN + ".jpg"; 
     File file = new File(path); 

     // if the file name already exists, append __x on the file name 
     do { 
      path = Environment.getExternalStorageDirectory() + "/" 
        + fileN + "__" + x + ".jpg"; 
      file = new File(path); 
      captureFile = null; 
      fileName = null; 
      sdcard(); 
      x++; 

     } while (file.exists()); 

     Uri outputFileUri = Uri.fromFile(file); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
     // 0, this code will be returned in onActivityResult() when the 
     // activity exits. 
     startActivityForResult(intent, 0); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
private void sdcard() { 
    try { 

     fileName = new FileEnvironment.getExternalStorageDirectory(),"CameraData"+             "__" + Integer.toString(x) +".csv"); 
      FileWriter writer = new FileWriter(fileName,false); 
     captureFile = new PrintWriter (writer); 
    } catch (Exception e) { 
     e.printStackTrace(); 

    } 
} 
// activity exits 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    try { 
     if (requestCode == IMAGE_CAPTURE) { 
      if (resultCode == RESULT_OK) { 
       if(captureFile != null){ 
       saveTimeStamp();  
       } 
            takeAnother(); 
      } 
     } 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
public void saveTimeStamp() { 

    try { 
     timeStamp=System.currentTimeMillis(); 
     captureFile.println(timeStamp + "," + x); 
     Log.d(LOG_TAG, "Saved TimeStamp."); 
     captureFile.close(); 

    } catch (Exception e) { 

     e.printStackTrace(); 
    } 
    } 
@Override 
public void onBackPressed() { 
    if(captureFile != null) { 
     try { 
      captureFile.close(); 
    //  writer.flush(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    CameraActivity.this.finish(); 
} 
public void takeAnother() { 
    try { 
     new AlertDialog.Builder(this).setTitle("The Code Of A Ninja") 
       .setMessage("Do you want to take another picture?") 
       .setPositiveButton("YES", new OnClickListener() { 
        public void onClick(DialogInterface arg0, int arg1) { 
         arg0.dismiss(); 


         Intent nextActivity = new Intent(
            CameraActivity.this, CameraActivity.class); 
         CameraActivity.this.finish(); 
         startActivity(nextActivity); 
        } 
       }) 
       .setNegativeButton("NO", new OnClickListener() { 
        public void onClick(DialogInterface arg0, int arg1) { 
         arg0.dismiss(); 
         Toast.makeText(CameraActivity.this, 
           "Done taking picture.", Toast.LENGTH_LONG) 
           .show(); 




         // go to main activity 
         CameraActivity.this.finish(); 
        } 
       }).show(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}* 
+0

您的代码很难阅读。首先,你应该学会如何使用调试器。 Logcat和Toast是排除应用程序故障的一种糟糕方式。其次,请删除代码中的所有日志和祝词,以便阅读。 – Simon

+0

相反,请**不要删除日志 - 这是一个很好的调试方法。 –

回答

0

改变这一行:

FileWriter writer = new FileWriter(fileName,false); 

这一个:

FileWriter writer = new FileWriter(fileName,true); 
+1

请不要只是发布代码。你改变了什么?为什么?如果没有这个,OP(和未来的访问者)什么都不学。 – Simon

+0

谢谢Dyna ...它的工作。但是,我可以问你一个问题,你为什么要改变为真。尽管我在文件的开始部分写作,但没有附加它。感谢您的帮助 – RockStar

+0

Simon我刚刚删除了上一篇文章中提到的敬酒和日志,但是谢谢您的建议,因为我的问题已解决。不过,下次我发布我的代码或问题时,我会记住您的建议。 – RockStar

0

我不熟悉您正在使用您的数据写入到文件的方法,但我首先要确保您在清单文件中拥有适当的权限。以下XML应该是清单元素的子项:

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

这使Android可以写入内部和外部存储驱动器。