从android应用程序上传Google Drive Sqlite db文件
我能够上传数据库到驱动器使用以下文章。 但如果不使用应用程序,我无法直接脱机访问它 目标:在不同的应用程序中进一步使用db文件,因此每当我直接从google drive下载内容时,我希望它的格式可用 我正在使用MODE_WRITE_仅从应用程序内将文件上载到驱动器从android应用程序上传Google Drive Sqlite db文件,android,google-drive-android-api,Android,Google Drive Android Api,我能够上传数据库到驱动器使用以下文章。 但如果不使用应用程序,我无法直接脱机访问它 目标:在不同的应用程序中进一步使用db文件,因此每当我直接从google drive下载内容时,我希望它的格式可用 我正在使用MODE_WRITE_仅从应用程序内将文件上载到驱动器 mfile.open(api, DriveFile.MODE_WRITE_ONLY, new DriveFile.DownloadProgressListener() And mime type as this Stri
mfile.open(api, DriveFile.MODE_WRITE_ONLY, new DriveFile.DownloadProgressListener()
And mime type as this String mimeType = MimeTypeMap.getSingleton().getExtensionFromMimeType("db");
当我从手机上的外部sd卡访问时,我的db大小是44kb,但当我在硬盘上看到时,它显示40kb。请建议如何使其可读,以便我可以在sqlite浏览器中直接打开它,因为当我打开它时会显示“文件未识别”
我是否必须更改db文件的只写部分或mime类型。请说明可能存在的问题 我必须承认,我不知道你在问什么。但是,由于我已经成功地测试了一个上传到GooDrive的SQLite文件,我可以发布一段代码: 假设您的android设备上有一个SQLite文件:
java.io.File dbFile = Context.getDatabasePath([YOUR_DB_NAME])
然后可以调用此方法:
upload("temp.db", dbFile, "application/x-sqlite3")
com.google.android.gms.common.api.GoogleApiClient GAC;
///...
void upload(final String titl, final File file, final String mime) {
if (GAC != null && GAC.isConnected() && titl != null && file != null) try {
Drive.DriveApi.newDriveContents(GAC).setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(@NonNull DriveContentsResult contRslt) {
if (contRslt.getStatus().isSuccess()){
DriveContents cont = contRslt.getDriveContents();
if (cont != null && file2Os(cont.getOutputStream(), file)) {
MetadataChangeSet meta = new Builder().setTitle(titl).setMimeType(mime).build();
Drive.DriveApi.getRootFolder(GAC).createFile(GAC, meta, cont).setResultCallback(
new ResultCallback<DriveFileResult>() {
@Override
public void onResult(@NonNull DriveFileResult fileRslt) {
if (fileRslt.getStatus().isSuccess()) {
// fileRslt.getDriveFile(); BINGO !!!
}
}
}
);
}
}
}
});
} catch (Exception e) { e.printStackTrace(); }
}
static boolean file2Os(OutputStream os, File file) {
boolean bOK = false;
InputStream is = null;
if (file != null && os != null) try {
byte[] buf = new byte[4096];
is = new FileInputStream(file);
int c;
while ((c = is.read(buf, 0, buf.length)) > 0)
os.write(buf, 0, c);
bOK = true;
} catch (Exception e) {e.printStackTrace();}
finally {
try {
os.flush(); os.close();
if (is != null )is.close();
} catch (Exception e) {e.printStackTrace();}
}
return bOK;
}
upload(“temp.db”,dbFile,“application/x-sqlite3”)
com.google.android.gms.common.api.GoogleAppClient GAC;
///...
无效上载(最终字符串标题、最终文件文件、最终字符串mime){
如果(GAC!=null&&GAC.isConnected()&&titl!=null&&file!=null)尝试{
Drive.DriveApi.newDriveContents(GAC).setResultCallback(newResultCallback()){
@凌驾
public void onResult(@NonNull DriveContentsResult contRslt){
if(contRslt.getStatus().isSuccess()){
DriveContents cont=contRslt.getDriveContents();
if(cont!=null&&file2Os(cont.getOutputStream(),file)){
MetadataChangeSet meta=new Builder().setTitle(titl).setMimeType(mime.build();
Drive.DriveApi.getRootFolder(GAC).createFile(GAC,meta,cont).setResultCallback(
新的ResultCallback(){
@凌驾
public void onResult(@NonNull DriveFileResult fileRslt){
if(fileRslt.getStatus().issucess()){
//fileRslt.getDriveFile();答对了!!!
}
}
}
);
}
}
}
});
}catch(异常e){e.printStackTrace();}
}
静态布尔文件2(输出流操作系统,文件文件){
布尔值bOK=false;
InputStream=null;
如果(file!=null&&os!=null)尝试{
字节[]buf=新字节[4096];
is=新文件输入流(文件);
INTC;
而((c=is.read(buf,0,buf.length))>0)
os.write(buf,0,c);
bOK=真;
}catch(异常e){e.printStackTrace();}
最后{
试一试{
os.flush();os.close();
如果(is!=null)是.close();
}catch(异常e){e.printStackTrace();}
}
返回bOK;
}
在GooDrive的根目录中创建一个“temp.db”SQLite文件
如果需要将文件放置在不同的位置,您当然可以提供不同的父文件夹(而不是Drive.DriveApi.getRootFolder(GAC))
我希望这就是你想要实现的。祝你好运,我得承认,我不知道你在问什么。但是,由于我已经成功地测试了一个上传到GooDrive的SQLite文件,我可以发布一段代码: 假设您的android设备上有一个SQLite文件:
java.io.File dbFile = Context.getDatabasePath([YOUR_DB_NAME])
然后可以调用此方法:
upload("temp.db", dbFile, "application/x-sqlite3")
com.google.android.gms.common.api.GoogleApiClient GAC;
///...
void upload(final String titl, final File file, final String mime) {
if (GAC != null && GAC.isConnected() && titl != null && file != null) try {
Drive.DriveApi.newDriveContents(GAC).setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(@NonNull DriveContentsResult contRslt) {
if (contRslt.getStatus().isSuccess()){
DriveContents cont = contRslt.getDriveContents();
if (cont != null && file2Os(cont.getOutputStream(), file)) {
MetadataChangeSet meta = new Builder().setTitle(titl).setMimeType(mime).build();
Drive.DriveApi.getRootFolder(GAC).createFile(GAC, meta, cont).setResultCallback(
new ResultCallback<DriveFileResult>() {
@Override
public void onResult(@NonNull DriveFileResult fileRslt) {
if (fileRslt.getStatus().isSuccess()) {
// fileRslt.getDriveFile(); BINGO !!!
}
}
}
);
}
}
}
});
} catch (Exception e) { e.printStackTrace(); }
}
static boolean file2Os(OutputStream os, File file) {
boolean bOK = false;
InputStream is = null;
if (file != null && os != null) try {
byte[] buf = new byte[4096];
is = new FileInputStream(file);
int c;
while ((c = is.read(buf, 0, buf.length)) > 0)
os.write(buf, 0, c);
bOK = true;
} catch (Exception e) {e.printStackTrace();}
finally {
try {
os.flush(); os.close();
if (is != null )is.close();
} catch (Exception e) {e.printStackTrace();}
}
return bOK;
}
upload(“temp.db”,dbFile,“application/x-sqlite3”)
com.google.android.gms.common.api.GoogleAppClient GAC;
///...
无效上载(最终字符串标题、最终文件文件、最终字符串mime){
如果(GAC!=null&&GAC.isConnected()&&titl!=null&&file!=null)尝试{
Drive.DriveApi.newDriveContents(GAC).setResultCallback(newResultCallback()){
@凌驾
public void onResult(@NonNull DriveContentsResult contRslt){
if(contRslt.getStatus().isSuccess()){
DriveContents cont=contRslt.getDriveContents();
if(cont!=null&&file2Os(cont.getOutputStream(),file)){
MetadataChangeSet meta=new Builder().setTitle(titl).setMimeType(mime.build();
Drive.DriveApi.getRootFolder(GAC).createFile(GAC,meta,cont).setResultCallback(
新的ResultCallback(){
@凌驾
public void onResult(@NonNull DriveFileResult fileRslt){
if(fileRslt.getStatus().issucess()){
//fileRslt.getDriveFile();答对了!!!
}
}
}
);
}
}
}
});
}catch(异常e){e.printStackTrace();}
}
静态布尔文件2(输出流操作系统,文件文件){
布尔值bOK=false;
InputStream=null;
如果(file!=null&&os!=null)尝试{
字节[]buf=新字节[4096];
is=新文件输入流(文件);
INTC;
而((c=is.read(buf,0,buf.length))>0)
os.write(buf,0,c);
bOK=真;
}catch(异常e){e.printStackTrace();}
最后{
试一试{
os.flush();os.close();
如果(is!=null)是.close();
}catch(异常e){e.printStackTrace();}
}
返回bOK;
}
在GooDrive的根目录中创建一个“temp.db”SQLite文件
如果需要将文件放置在不同的位置,您当然可以提供不同的父文件夹(而不是Drive.DriveApi.getRootFolder(GAC))
我希望这就是你想要实现的。祝你好运你的问题是当你从不同的客户端访问文件时,它们不一样吗?你的问题是当你从不同的客户端访问文件时,它们不一样吗?