2017-04-14 1 views
0

Salut les amis, j'ai téléchargé mon fichier sqlite db à google drive à partir de mon application, mais la taille du fichier montre 0 octets pourquoi? comment le résoudre et comment télécharger le fichier réellement original (taille est de 108 kb) à Google Drive. Y at-il une solution de rechange, s'il vous plaît quelqu'un me aider c'est mon codeAprès avoir téléchargé sqlite fichier db à google drive alors il montre la taille du fichier est 0 octets

import android.content.ContentValues; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GoogleApiAvailability; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi; 
import com.google.android.gms.drive.DriveContents; 
import com.google.android.gms.drive.DriveFolder; 
import com.google.android.gms.drive.Metadata; 
import com.google.android.gms.drive.MetadataChangeSet; 
import com.google.android.gms.drive.query.Filters; 
import com.google.android.gms.drive.query.Query; 
import com.google.android.gms.drive.query.SearchableField; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 

public class MainActivitySample extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

private Button button_create_file; 
private Button button_upload_to_google_drive; 
private GoogleApiClient mGoogleApiClient; 
private static final String TAG = "<<DRIVE>>"; 
protected static final int REQUEST_CODE_RESOLUTION = 1337; 
private String FOLDER_NAME = "New Folder"; 
com.google.android.gms.common.api.GoogleApiClient GAC; 

Context mContext; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_sample); 


    button_create_file = (Button) findViewById(R.id.button_create_file); 
    button_upload_to_google_drive = (Button) findViewById(R.id.button_upload_to_google_drive); 


    button_create_file.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //WRITE A SIMPLE TEXT FILE IN SDCARD. BE CAREFUL TO GRANT PERMISSION IN ANDROID 6+ 
      //writeToFile("tehfile", " I nenu"); 

     } 
    }); 


    button_upload_to_google_drive.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mGoogleApiClient != null) { 
       upload_to_drive(); 
      } else { 
       Log.e(TAG, "Could not fucking connect to google drive manager"); 
      } 
     } 
    }); 


} 



private void upload_to_drive() { 

    //async check if folder exists... if not, create it. continue after with create_file_in_folder(driveId); 
    check_folder_exists(); 
} 

private void check_folder_exists() { 
    Query query = 
      new Query.Builder().addFilter(Filters.and(Filters.eq(SearchableField.TITLE, FOLDER_NAME), Filters.eq(SearchableField.TRASHED, false))) 
        .build(); 
    Drive.DriveApi.query(mGoogleApiClient, query).setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() { 
     @Override 
     public void onResult(DriveApi.MetadataBufferResult result) { 
      if (!result.getStatus().isSuccess()) { 
       Log.e(TAG, "Cannot create folder in the root."); 
      } else { 
       boolean isFound = false; 
       for (Metadata m : result.getMetadataBuffer()) { 
        if (m.getTitle().equals(FOLDER_NAME)) { 
         Log.e(TAG, "Folder exists"); 
         isFound = true; 
         DriveId driveId = m.getDriveId(); 
         create_file_in_folder(driveId); 
         break; 
        } 
       } 
       if (!isFound) { 
        Log.i(TAG, "Folder not found; creating it."); 
        MetadataChangeSet changeSet = new MetadataChangeSet.Builder().setTitle(FOLDER_NAME).build(); 
        Drive.DriveApi.getRootFolder(mGoogleApiClient) 
          .createFolder(mGoogleApiClient, changeSet) 
          .setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() { 
           @Override 
           public void onResult(DriveFolder.DriveFolderResult result) { 
            if (!result.getStatus().isSuccess()) { 
             Log.e(TAG, "U AR A MORON! Error while trying to create the folder"); 
            } else { 
             Log.i(TAG, "Created a folder"); 
             DriveId driveId = result.getDriveFolder().getDriveId(); 
             create_file_in_folder(driveId); 
            } 
           } 
          }); 
       } 
      } 
     } 
    }); 
} 

private void create_file_in_folder(final DriveId driveId) { 

    Drive.DriveApi.newDriveContents(mGoogleApiClient).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() { 
     @Override 
     public void onResult(@NonNull DriveApi.DriveContentsResult driveContentsResult) { 
      if (!driveContentsResult.getStatus().isSuccess()) { 
       Log.e(TAG, "U AR A MORON! Error while trying to create new file contents"); 
       return; 
      } 

      OutputStream outputStream = driveContentsResult.getDriveContents().getOutputStream(); 

      //------ THIS IS AN EXAMPLE FOR FILE -------- 
      Toast.makeText(MainActivitySample.this, "Uploading to drive...", Toast.LENGTH_LONG).show(); 
      final File theFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Hello/IKONNECTRETAIL.db"); //>>>>>> WHAT FILE ? 
      try { 
       FileInputStream fileInputStream = new FileInputStream(theFile); 
       byte[] buffer = new byte[1024]; 
       //long size = theFile.length(); 
       int bytesRead; 
       while ((bytesRead = fileInputStream.read(buffer)) != -1) { 
        outputStream.write(buffer, 0, bytesRead); 
       } 
      } catch (IOException e1) { 
       Log.i(TAG, "U AR A MORON! Unable to write file contents."); 
      } 
      String mimeType = MimeTypeMap.getSingleton().getExtensionFromMimeType("db"); 
      MetadataChangeSet changeSet = new MetadataChangeSet.Builder().setTitle(theFile.getName()).setMimeType(mimeType).setStarred(false).build(); 
      DriveFolder folder = driveId.asDriveFolder(); 
      folder.createFile(mGoogleApiClient, changeSet, driveContentsResult.getDriveContents()) 
        .setResultCallback(new ResultCallback<DriveFolder.DriveFileResult>() { 
         @Override 
         public void onResult(@NonNull DriveFolder.DriveFileResult driveFileResult) { 
          if (!driveFileResult.getStatus().isSuccess()) { 
           Log.e(TAG, "U AR A MORON! Error while trying to create the file"); 
           return; 
          } 
          Log.v(TAG, "Created a file: " + driveFileResult.getDriveFile().getDriveId()); 
         } 
        }); 
     } 
    }); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (mGoogleApiClient == null) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(Drive.API) 
       .addScope(Drive.SCOPE_FILE) 
       .addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
    } 
    mGoogleApiClient.connect(); 
} 

public void writeToFile(String fileName, String body) { 
    FileOutputStream fos = null; 
    try { 
     final File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/xtests/"); 
     if (!dir.exists()) { 
      if (!dir.mkdirs()) { 
       Log.e("ALERT", "U AR A MORON! could not create the directories. CHECK THE FUCKING PERMISSIONS SON!"); 
      } 
     } 
     final File myFile = new File(dir, fileName + "_" + String.valueOf(System.currentTimeMillis()) + ".txt"); 
     if (!myFile.exists()) { 
      myFile.createNewFile(); 
     } 

     fos = new FileOutputStream(myFile); 
     fos.write(body.getBytes()); 
     fos.close(); 
     Toast.makeText(MainActivitySample.this, "File created ok! Let me give you a fucking congratulations!", Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    Log.v(TAG, "+++++++++++++++++++ onConnected +++++++++++++++++++"); 
} 

@Override 
public void onConnectionSuspended(int i) { 
    Log.e(TAG, "onConnectionSuspended [" + String.valueOf(i) + "]"); 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult result) { 
    Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); 
    if (!result.hasResolution()) { 
     // show the localized error dialog. 
     GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show(); 
     return; 
    } 
    try { 
     result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
    } catch (IntentSender.SendIntentException e) { 
     Log.e(TAG, "U AR A MORON! Exception while starting resolution activity", e); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) { 
     mGoogleApiClient.connect(); 
    } 
} 

@Override 
protected void onPause() { 
    if (mGoogleApiClient != null) { 
     mGoogleApiClient.disconnect(); 
    } 
    super.onPause(); 
} 
} 

c'est le pic d'entraînement enter image description here

s'il vous plaît moi de vous remercier aider à adavance

Répondre

0

Je ne trouve pas .commit() dans votre code. Après manipulations de fichiers que vous devez appeler

contentsResult.getDriveContents().commit(mGoogleApiClient, null) 

ou .discard (GoogleApiClient mGoogleApiClient)

Plus d'informations sous the link

Après créer le fichier faire juste

DriveFile file = driveFileResult.getDriveFile(); 
file.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() { 
    @Override 
    public void onResult(@NonNull DriveApi.DriveContentsResult driveContentsResult) { 
     OutputStream outputStream = contentsResult.getDriveContents().getOutputStream(); 
     //your code here to write into output stream 
     outputStream.close(); 
     contentsResult.getDriveContents().commit(mGoogleApiClient, null); 
    }