1

我遇到了一个问题,我的应用程序在我用于调试目的的 Galaxy Tab 7.7 GT-P6800上运行良好,在我的Galaxy Pocket上运行并创建一个文件夹来放置文件,甚至接受输入和所有这些事情但它没有创建文件。我正在 eclipse 中开发,该应用程序的构建 SDK 是 Android 2.3.3 (API 10)。

该应用程序的代码如下所示,找不到问题所在...

package com.android.app1;

public class MainActivity extends Activity {

//Timestamp for file name e.g. Data_7-19-2012
SimpleDateFormat s1 = new SimpleDateFormat("MM-dd-yyyy_hh:mm:ss");
final String format1 = s1.format(new Date()); 

final public String FileName = "Data_"+format1+".csv";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText addbarcode = (EditText) findViewById(R.id.editText1); 
addbarcode.setOnKeyListener(new OnKeyListener()
    {
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                switch (keyCode)
                {
                    case KeyEvent.KEYCODE_ENTER:

                        //to get Timestamp
                        SimpleDateFormat s = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss");
                        String format = s.format(new Date());

                        //get barcode in a variable
                        Editable barcode = addbarcode.getText();

                        final String DATASTRING = new String(""+barcode+","+format+"");



                        try
                        {
                            File root = new File(Environment.getExternalStorageDirectory(), "BarcodeData");

                            if (!root.exists()) {
                                root.mkdirs();

                            }

                        //Showing file directory
                        TextView etDir= (TextView)findViewById(R.id.textView1);
                            etDir.setText(root.toString());


                            File gpxfile = new File(root, FileName);

                            BufferedWriter bW;

                            bW = new BufferedWriter(new FileWriter(gpxfile, true));
                            bW.write(DATASTRING);
                            bW.newLine();
                            bW.flush();
                            bW.close();

                        }
                        catch(IOException e)
                        {
                             e.printStackTrace();
                        }
            String readString = new String(DATASTRING);
                    TextView etData= (TextView)findViewById(R.id.textView2);

                    etData.setText(readString);

                        //Clear the editview for new entries
                        addbarcode.setText("");   
                      return true;
                    default:
                        break;
                }
            }
            return false;
        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.send:

            final File dir = getFilesDir();

            final File shareFile = new File(dir, FileName);
            Uri u1  =   null;
            u1  =   Uri.fromFile(shareFile);

            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Person Details");
            sendIntent.putExtra(Intent.EXTRA_STREAM, u1);
            sendIntent.setType("text/csv");
            startActivity(sendIntent);
            break;
    }
    return true;
}
}

我什至添加了所需的权限

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

甚至从项目属性中设置 Java Build Path 属性。

4

1 回答 1

1

请参阅getExternalStorageDirectory()文档。

获取 Android 外部存储目录。如果该目录已被用户安装在他们的计算机上、已从设备中删除或发生了其他问题,则该目录当前可能无法访问。您可以使用 getExternalStorageState() 确定其当前状态。

null在访问它之前检查它。

于 2012-07-23T08:24:05.373 回答