【问题标题】:Reading Database File from External Storage从外部存储读取数据库文件
【发布时间】:2020-05-28 14:28:52
【问题描述】:

所以,这个程序从 firebase 存储下载一个文件, 我的下载代码是:

private void downloadFiles(Context context, String fileName, String destinationDirectory, String url) {
    DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
    Uri uri = Uri.parse(url);
    DownloadManager.Request request = new DownloadManager.Request(uri);

    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    request.setDestinationInExternalFilesDir(context, String.valueOf(destinationDirectory), fileName);

    downloadManager.enqueue(request);
}

public void downloading(final String name) {
    downloadRef = storage.getInstance().getReference().child(name);
    downloadRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            String url = uri.toString();
            downloadFiles(Main2Activity.this, name,  getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), url);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(Main2Activity.this, "Failed!!!", Toast.LENGTH_LONG).show();
        }
    });
}

然后我想使用这个数据库,所以我尝试打开它:

database = SQLiteDatabase.openDatabase(myPath, null, 0);

我该如何解决这个问题?这对伙计们很有帮助。

【问题讨论】:

    标签: java android firebase firebase-storage


    【解决方案1】:

    我认为您的问题是可访问性。 这就是为什么我带回一个活动来获得用户的许可。 你测试这段代码

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                            && ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    } else {
                        Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                        intent.putExtra("name", arrayList.get(position));
                        startActivity(intent);
                    }
    
                }
            });
    

    【讨论】:

    • 它的API 29,我也意识到我的路径可能有问题,所以你知道如何编写正确的路径,我可以从Files / SDK Built x86 / Android /手动访问文件数据/项目名称/文件
    • 您可以将您的代码发送到我的电子邮件地址吗?也许我可以帮助你
    • 好的,但是我找不到您的电子邮件,这是我的,您可以联系我,我会尽快回复:k.burak02@outlook.com
    • javaddehban1@gmail.com
    【解决方案2】:

    您正在使用Environment.getExternalStorageState(),它返回主要共享/外部存储媒体的当前状态。它不能用于获取路径作为任何文件的字符串。使用context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)获取Download目录路径的字符串值。

    【讨论】:

    • 嘿,我尝试了您让我尝试的方法,它确实有效,但访问该文件仍然存在问题。我可以使用:File file = new File(path) ,但我不能将它与数据库一起使用,我尝试过:database = SQLiteDatabase.openDatabase(myPath, null, 0); 它适用于文件但不适用于数据库
    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多