【问题标题】:Sqlite Data To CSV file in androidSqlite 数据到 Android 中的 CSV 文件
【发布时间】:2017-01-22 17:10:38
【问题描述】:

这是我的代码,当我运行它时,它不会在我的 SD 卡中存储或生成任何文件。我不知道我在哪里做错了对不起作为我编程初学者的错误

 List<ClientModel> list = new ArrayList<ClientModel>(); //My Model
        DatabaseHelper db = new DatabaseHelper(getApplicationContext()); //My DBHelper Class
        list = db.getAllClientList(); //My Method to get all data from database

        File exportDir = new File(Environment.getExternalStorageDirectory(), ""); //

        if (!exportDir.exists())
        {
            exportDir.mkdirs();
        }

        File file = new File(exportDir, "Abc.csv"); //File Name


        //writing data to a txt file

        try {

            file.createNewFile();
            CSVWriter csvWrite = new CSVWriter(new FileWriter(file));   //Writing data in csv file
            for (int index = 0; index < list.size();) {
                String arrStr[] = { String.valueOf(list.get(0))};
                csvWrite.writeNext(arrStr);

            }
            csvWrite.close();

            //But Above Code is not working for me

        } catch (IOException e) {

            e.printStackTrace();
        }

【问题讨论】:

  • 您是否在清单中授予了写入权限?
  • 是的,我已经添加了
  • 您在catch 块中收到什么错误?
  • 打开失败:EACCES(权限被拒绝)在调试中显示我。但我已经添加了权限

标签: android sqlite export export-to-csv


【解决方案1】:

您需要检查运行时 permission 的 Api 23:

试试这个:

if(isStoragePermissionGranted()){
        Save_file();
    }

现在在您的活动中添加此方法:

    public void Save_file(){    
        File exportDir = new File(Environment.getExternalStorageDirectory(), ""); //

                if (!exportDir.exists())
                {
                    exportDir.mkdirs();
                }
                File file = new File(exportDir, "Abc.csv"); //File Name
                //writing data to a txt file
                try {

                    file.createNewFile();
                    CSVWriter csvWrite = new CSVWriter(new FileWriter(file));   //Writing data in csv file
                    for (int index = 0; index < list.size();) {
                        String arrStr[] = { String.valueOf(list.get(0))};
                        csvWrite.writeNext(arrStr);

                    }
                    csvWrite.close();

                    //But Above Code is not working for me

                } catch (IOException e) {

                    e.printStackTrace();
                }
            }
        }

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
        Save_file();
    }
}

【讨论】:

  • 试试你的代码,谢谢你。我没有每次都检查 api 23 的权限
  • @Cool 如果答案有帮助..请通过单击勾号将其标记为正确
猜你喜欢
  • 2015-09-30
  • 2016-01-21
  • 2016-05-13
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2019-08-17
  • 2010-12-25
相关资源
最近更新 更多