Autore Topic: Upload file su google drive  (Letto 1323 volte)

Offline grad

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note 10.1
  • Sistema operativo:
    Mac OS X 10.10
Upload file su google drive
« il: 30 Ottobre 2013, 21:25:00 CET »
0
Buonasera a tutti!
Nella mia app vorrei implementare una funzione che mi consenta fare l'upload di un file che è appena stato elaborato dalla mia applicazione. Nel mio caso si tratta di un pdf.
Ho seguito questa guida: https://developers.google.com/drive/quickstart-android
Ho registrato la mia applicazione su google, nel mio file manifest ho inserito i 2 permessi INTERNET e GET ACCOUNTS.

Il problema è che durante l'esecuzione il mio codice torna errore:  The Google Play services resources were not found.
Ho controllato e nel java build path la libreria di google play services è selezionata e correttamente importata.
Il codice è praticamente identico a quello dell'esempio riportato nel link di sopra. A qualcuno è mai capitato?
Oppure la strada è proprio errata?
Qualcuno potrebbe aiutarmi? Ringrazio in anticipo tutti,
Buona serata

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Upload file su google drive
« Risposta #1 il: 30 Ottobre 2013, 21:39:21 CET »
0
Su device o emulatore con google api?
Sei loggato nell'account google?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline grad

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note 10.1
  • Sistema operativo:
    Mac OS X 10.10
Re:Upload file su google drive
« Risposta #2 il: 31 Ottobre 2013, 09:03:05 CET »
0
In un device e sono correttamente loggato

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Upload file su google drive
« Risposta #3 il: 31 Ottobre 2013, 09:10:40 CET »
0
Mi viene in mente solo che potresti aver aggiornato qualcosa a metà nell'android SDK.
Prova a vedere se c'è qualche update da fare, poi togli la library dal progetto e rimettila nuovamente (magari quella che hai adesso in uso è una versione più vecchia).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline grad

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note 10.1
  • Sistema operativo:
    Mac OS X 10.10
Re:Upload file su google drive
« Risposta #4 il: 31 Ottobre 2013, 09:27:51 CET »
0
Grazie, ho provato a fare quello che mi hai detto ma, riporta comunque i seguenti errori:

10-31 09:23:17.040: E/GooglePlayServicesUtil(18957): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.

10-31 09:23:17.070: E/AndroidRuntime(18957): FATAL EXCEPTION: Thread-392
10-31 09:23:17.070: E/AndroidRuntime(18957): java.lang.NullPointerException: [sa] accountName cannot be null.
10-31 09:23:17.070: E/AndroidRuntime(18957):    at android.os.Parcel.readException(Parcel.java:1431)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at android.os.Parcel.readException(Parcel.java:1379)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.android.gms.internal.a$a$a.a(Unknown Source)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:255)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:279)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:858)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequest(MediaHttpUploader.java:559)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequestWithBackOffAndGZip(MediaHttpUploader.java:581)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.media.MediaHttpUploader.executeUploadInitiation(MediaHttpUploader.java:533)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:393)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:345)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:418)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at it.dp2000.biometricsigner.util.DriveUploader$1.run(DriveUploader.java:73)
10-31 09:23:17.070: E/AndroidRuntime(18957):    at java.lang.Thread.run(Thread.java:856)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Upload file su google drive
« Risposta #5 il: 31 Ottobre 2013, 09:39:24 CET »
0
Una indicazione c'è nel LogCat:

Citazione
10-31 09:23:17.070: E/AndroidRuntime(18957): java.lang.NullPointerException: [sa] accountName cannot be null.

Controlla l'account che fornisce, magari per qualche errore banale passi una stringa null.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline grad

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note 10.1
  • Sistema operativo:
    Mac OS X 10.10
Re:Upload file su google drive
« Risposta #6 il: 31 Ottobre 2013, 09:50:04 CET »
0
L'account che fornisce in che senso?
Il problema potrebbe stare nelle credenziali?

Io pre creare le credenziali uso questo codice:

Codice (Java): [Seleziona]
List<String> scopes = new ArrayList<String>();
scopes.add(DriveScopes.DRIVE);
credential = GoogleAccountCredential.usingOAuth2(ctx, scopes );

Però in debug mode le credential non sono nulle...

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Upload file su google drive
« Risposta #7 il: 31 Ottobre 2013, 10:40:23 CET »
0
Non so come è il tuo progetto e il tuo codice, ma immagino ci sia una acitivity per scegliere quale Account Google collegare, qualcosa che poi porta a ottenere il nome dell'account. Mi riferisco a questa parte di codice nel link che hai postato all'inizio:

Codice (Java): [Seleziona]
        String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        if (accountName != null) {
          credential.setSelectedAccountName(accountName);
          service = getDriveService(credential);
          startCameraIntent();
        }

Ci arrivi a questo punto ?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline grad

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note 10.1
  • Sistema operativo:
    Mac OS X 10.10
Re:Upload file su google drive
« Risposta #8 il: 31 Ottobre 2013, 11:05:50 CET »
0
eh no ho modificato il codice. Non ho nessuna activity che sceglie l'account. Pensavo che prendesse in automatico l'account di default di quando l'utente si è loggiato per accedere a drive.
Devo quindi per forza fare l'activity che sceglie l'account?

Post unito: 31 Ottobre 2013, 11:14:07 CET
effettivamente mAccount rimane NULL.... mi Sto arrivando! che dovrò obbligatoriamente fare un'attività che mi sceglie l'account

Codice (Java): [Seleziona]
credential = GoogleAccountCredential.usingOAuth2(ctx, scopes);
mAccount = credential.getSelectedAccount();

« Ultima modifica: 31 Ottobre 2013, 11:14:07 CET da grad, Reason: Merged DoublePost »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Upload file su google drive
« Risposta #9 il: 31 Ottobre 2013, 11:36:07 CET »
0
Puoi anche evitare l'activity e scegliere direttamente il primo. Ma devi farlo comunque tu "a mano".
Non lo fa in automatico.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline grad

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note 10.1
  • Sistema operativo:
    Mac OS X 10.10
Re:Upload file su google drive
« Risposta #10 il: 31 Ottobre 2013, 13:36:51 CET »
0
Ti ringrazio moltissimo Bradipo!
Ho risolto facendo così:
Ho creato un'activity come quella dell'esempio che prende come extras dall'attività padre l'uri del file da caricare e poi al posto di lanciare la fotocamera, lancia direttamente l'upload se il file esiste.

Codice (Java): [Seleziona]
[...]
        static final int REQUEST_ACCOUNT_PICKER = 1;
        static final int REQUEST_AUTHORIZATION = 2;
        static final int CAPTURE_IMAGE = 3;
       
        private static Uri fileUri;
        private static Drive service;
        private GoogleAccountCredential credential;
       
        private Uri fUri;
 
        List<String> scopes = new ArrayList<String>();
 
        [...]

        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
           
            Intent intent = getIntent();
            String u = intent.getStringExtra("uri");
           
            fUri = Uri.parse(u);
           
            scopes.add(DriveScopes.DRIVE);
            credential = GoogleAccountCredential.usingOAuth2(this, scopes);
            startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
        }


        [...]

private void saveFileToDrive()
        {
                Thread t = new Thread(new Runnable()
                {
                        @Override
                        public void run()
                        {
                                try
                                {
                                        // File's binary content
                                        java.io.File fileContent = new java.io.File(fUri.getPath());
                                        FileContent mediaContent = new FileContent("application/pdf", fileContent);

                                        // File's metadata.
                                        File body = new File();
                                        body.setTitle(fileContent.getName());
                                        body.setMimeType("application/pdf");

                                        File file = service.files().insert(body, mediaContent).execute();
                                        if (file != null)
                                        {
                                                showToast("PDF uploaded: " + file.getTitle());
                                        }
                                }
                                catch (UserRecoverableAuthIOException e)
                                {
                                        startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
                                }
                                catch (IOException e)
                                {
                                        e.printStackTrace();
                                }
                        }
                });
                t.start();
        }