下载Google Drive API Android的数据库文件

下载Google Drive API Android的数据库文件,android,mysql,google-drive-android-api,Android,Mysql,Google Drive Android Api,我正在使用驱动器api在google drive上的隐藏应用程序文件夹中创建一个数据库文件。数据库文件名为notes.db。我已经成功地将数据库文件上载到google drive,但我不知道如何将其下载回用户设备。这就是我想做的。我的应用程序在用户的设备上创建了一个名为School Binder的文件夹。在该文件夹中还有另一个名为Note Backup的文件夹。这里是我备份数据库的地方。目录是 Environment.getExternalStorageDirectory() + "/Scho

我正在使用驱动器api在google drive上的隐藏应用程序文件夹中创建一个数据库文件。数据库文件名为notes.db。我已经成功地将数据库文件上载到google drive,但我不知道如何将其下载回用户设备。这就是我想做的。我的应用程序在用户的设备上创建了一个名为School Binder的文件夹。在该文件夹中还有另一个名为Note Backup的文件夹。这里是我备份数据库的地方。目录是

 Environment.getExternalStorageDirectory() + "/School Binder/Note Backups/Notes.db"
Google drive获取此文件并将其上载到隐藏的应用程序文件夹。现在我想把这个notes.db文件存储在谷歌硬盘上的那个app文件夹中,然后下载回手机上的这个目录

 Environment.getExternalStorageDirectory() + "/School Binder/Note Backups/Notes.db"
我该怎么做呢。谢谢以下是我上传数据库的代码,以确保正确运行

        // Define And Instantiate Variable DriveContents driveContents//
        DriveContents driveContents = result.getStatus().isSuccess() ? result.getDriveContents() : null;

        // Gets The Data for The File//
        if (driveContents != null) try {

            // Define And Instantiate Variable OutputStream outputStream//
            OutputStream outputStream = driveContents.getOutputStream();

            // Start Writing Data To File//
            if (outputStream != null) try {

                // Define And Instantiate Variable InputStream inputStream//
                InputStream inputStream = new FileInputStream(dbFile);

                // Define And Instantiate Variable Byte buffer//
                byte[] buffer = new byte[5000];

                // Define Variable Int data//
                int data;

                // Run Code While data Is Bigger Then Zero//
                while ((data = inputStream.read(buffer, 0, buffer.length)) > 0) {

                    // Write To outputStream//
                    outputStream.write(buffer, 0, data);

                    // Flush outputStream//
                    outputStream.flush();
                }

            } finally {

                // Close outputStream//
                outputStream.close();
            }

        } catch (Exception e) {e.printStackTrace(); Toast.makeText(getApplicationContext(), "Failed To Upload: No Backup File Found", Toast.LENGTH_LONG).show(); return;}
如何更改此设置以使其能够从google drive下载数据到文件中?在中,drive Android API允许您的应用程序访问文件,即使设备处于脱机状态。为了支持脱机情况,API实现了一个同步引擎,该引擎在后台运行,以便在网络访问可用时进行上游和下游更改,并解决冲突。如果文件尚未同步到本地上下文,但用户希望打开该文件,请执行初始下载请求。当请求文件时,API会自动处理此问题

在中,对文件的资源URL发出授权HTTP GET请求,并包含查询参数
alt=media
。但是,请注意,下载文件要求用户至少具有读取权限

HTTP请求示例:

得到 授权:持票人ya29.AHESVbXTUv5mHMo3RYfmS1YJonjzzdTOFZwvyOAUVhrs

对于编码部分,这可能也有帮助。

在中,驱动Android API允许应用程序访问文件,即使设备处于脱机状态。为了支持脱机情况,API实现了一个同步引擎,该引擎在后台运行,以便在网络访问可用时进行上游和下游更改,并解决冲突。如果文件尚未同步到本地上下文,但用户希望打开该文件,请执行初始下载请求。当请求文件时,API会自动处理此问题

在中,对文件的资源URL发出授权HTTP GET请求,并包含查询参数
alt=media
。但是,请注意,下载文件要求用户至少具有读取权限

HTTP请求示例:

得到 授权:持票人ya29.AHESVbXTUv5mHMo3RYfmS1YJonjzzdTOFZwvyOAUVhrs


对于编码部分,这可能也有帮助。

我发现这是我的代码,可以将数据库重新下载回手机

        //<editor-fold desc="Create Drive Db File On Device">

        // Log That The File Was Opened//
        Log.d("TAG", "File contents opened");

        // Define And Instantiate Variable DriveContents driveContents//
        DriveContents driveContents = result.getStatus().isSuccess() ? result.getDriveContents() : null;

        // Gets The Data for The File//
        if (driveContents != null) try {

            // Define And Instantiate Variable OutputStream outputStream//
            OutputStream outputStream = new FileOutputStream(dbFile);

            // Define And Instantiate Variable InputStream inputStream//
            InputStream inputStream = driveContents.getInputStream();

            // Define And Instantiate Variable Byte buffer//
            byte[] buffer = new byte[5000];

            // Define Variable Int data//
            int data;

            // Run Code While data Is Bigger Then Zero//
            while ((data = inputStream.read(buffer, 0, buffer.length)) > 0) {

                // Write To outputStream//
                outputStream.write(buffer, 0, data);

                // Flush outputStream//
                outputStream.flush();
            }

            // Close outputStream//
            outputStream.close();

            // Discard Drive Contents//
            driveContents.discard(googleApiClient);

        } catch (Exception e) {e.printStackTrace(); Toast.makeText(getApplicationContext(), "File Failed To Download", Toast.LENGTH_LONG).show(); }

        //</editor-fold>
//
//记录文件是否已打开//
Log.d(“标记”,“打开的文件内容”);
//定义并实例化变量DriveContents DriveContents//
DriveContents-DriveContents=result.getStatus().isSuccess()?result.getDriveContents():null;
//获取文件的数据//
如果(driveContents!=null),请尝试{
//定义并实例化变量OutputStream OutputStream//
OutputStream OutputStream=新文件OutputStream(dbFile);
//定义并实例化变量InputStream InputStream//
InputStream InputStream=driveContents.getInputStream();
//定义并实例化可变字节缓冲区//
字节[]缓冲区=新字节[5000];
//定义变量Int数据//
int数据;
//当数据大于零时运行代码//
而((data=inputStream.read(buffer,0,buffer.length))>0){
//写入输出流//
写入(缓冲区,0,数据);
//刷新输出流//
outputStream.flush();
}
//关闭输出流//
outputStream.close();
//丢弃驱动器内容//
driveContents.discard(googleApiClient);
}catch(异常e){e.printStackTrace();Toast.makeText(getApplicationContext(),“文件下载失败”,Toast.LENGTH_LONG.show();}
//

我发现这是我将数据库重新下载回手机的代码

        //<editor-fold desc="Create Drive Db File On Device">

        // Log That The File Was Opened//
        Log.d("TAG", "File contents opened");

        // Define And Instantiate Variable DriveContents driveContents//
        DriveContents driveContents = result.getStatus().isSuccess() ? result.getDriveContents() : null;

        // Gets The Data for The File//
        if (driveContents != null) try {

            // Define And Instantiate Variable OutputStream outputStream//
            OutputStream outputStream = new FileOutputStream(dbFile);

            // Define And Instantiate Variable InputStream inputStream//
            InputStream inputStream = driveContents.getInputStream();

            // Define And Instantiate Variable Byte buffer//
            byte[] buffer = new byte[5000];

            // Define Variable Int data//
            int data;

            // Run Code While data Is Bigger Then Zero//
            while ((data = inputStream.read(buffer, 0, buffer.length)) > 0) {

                // Write To outputStream//
                outputStream.write(buffer, 0, data);

                // Flush outputStream//
                outputStream.flush();
            }

            // Close outputStream//
            outputStream.close();

            // Discard Drive Contents//
            driveContents.discard(googleApiClient);

        } catch (Exception e) {e.printStackTrace(); Toast.makeText(getApplicationContext(), "File Failed To Download", Toast.LENGTH_LONG).show(); }

        //</editor-fold>
//
//记录文件是否已打开//
Log.d(“标记”,“打开的文件内容”);
//定义并实例化变量DriveContents DriveContents//
DriveContents-DriveContents=result.getStatus().isSuccess()?result.getDriveContents():null;
//获取文件的数据//
如果(driveContents!=null),请尝试{
//定义并实例化变量OutputStream OutputStream//
OutputStream OutputStream=新文件OutputStream(dbFile);
//定义并实例化变量InputStream InputStream//
InputStream InputStream=driveContents.getInputStream();
//定义并实例化可变字节缓冲区//
字节[]缓冲区=新字节[5000];
//定义变量Int数据//
int数据;
//当数据大于零时运行代码//
而((data=inputStream.read(buffer,0,buffer.length))>0){
//写入输出流//
写入(缓冲区,0,数据);
//刷新输出流//
outputStream.flush();
}
//关闭输出流//
outputStream.close();
//丢弃驱动器内容//
driveContents.discard(googleApiClient);
}catch(异常e){e.printStackTrace();Toast.makeText(getApplicationContext(),“文件下载失败”,Toast.LENGTH_LONG.show();}
//

这是一个完整的类,用于上传内部数据库、下载并从Google Drive中删除

只需要异步调用函数并向用户显示进度条。 DownloadFromGoogleDrive函数保存数据库i