11

Sto provando a fare un'app per Android che deve funzionare con API di fogli di lavoro Google. Sono nuovo in questo, quindi sto iniziando con la versione 3 dell'api: https://developers.google.com/google-apps/spreadsheets/Come posso collegare app Android con fogli di lavoro Fogli Google?

Ho seguito tutti i passaggi, scaricato tutti i file jar nella sottocartella lib nella cartella del mio progetto e quindi ho aggiunto alla build percorso in Eclipse come al solito. Quindi, anche se non v'è alcun esempio Java per eseguire OAuth 2.0, ho solo cercato di dichiarare:

SpreadsheetService service = new SpreadsheetService("v1"); 

ma quando ho emulare questa linea semplice mi dà un errore:

java.lang.NoClassDefFoundError: com.google.gdata.client.spreadsheet.SpreadsheetService 

sto usando tutto i vasi inclusi nella documentazione e ho l'importazione:

import com.google.gdata.client.spreadsheet.SpreadsheetService; 

ma sono totalmente perso. Non so che altro fare solo per iniziare, connettermi alle API di Google e lavorare con i fogli di calcolo.

+0

Questo errore è dovuto al fatto che non riceve la classe SpreadsheetService. Quali file jar sono stati aggiunti? http://code.google.com/p/google-api-java-client/downloads/detail?name=google-api-java-client-1.11.0-beta.zip&can=2&q= Hai usato questa libreria? – Scorpion

+0

Hai impostato il percorso di costruzione del progetto o no? Se non mi raccomando, per favore prima fai quella cosa e poi riprova. – Scorpion

+0

Ho seguito tutti i passaggi della documentazione e ho costruito il percorso in Eclipse con tutte le librerie incluse. Ma ottengono ancora lo stesso errore. – user1680435

risposta

4

Grazie così tanto Scorpion! Funziona!! Ci sto provando da troppo tempo. Ok ecco la mia soluzione: ho iniziato un nuovo progetto e incluso questi vasi:

gdata-client-1.0 
gdata-client-meta-1.0 
gdata-core-1.0 
gdata-spreadsheet-3.0 
gdata-spreadsheet-meta-3.0 
guava-13.0.1 

e il mio codice:

SpreadsheetService spreadsheet= new SpreadsheetService("v1"); 
    spreadsheet.setProtocolVersion(SpreadsheetService.Versions.V3); 

    try { 
     spreadsheet.setUserCredentials("username", "password"); 
     URL metafeedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"); 
     SpreadsheetFeed feed = spreadsheet.getFeed(metafeedUrl, SpreadsheetFeed.class); 

     List<SpreadsheetEntry> spreadsheets = feed.getEntries(); 
     for (SpreadsheetEntry service : spreadsheets) {    
      System.out.println(service.getTitle().getPlainText()); 
     } 
    } catch (AuthenticationException e) {   
     e.printStackTrace(); 
    } 

naturalmente questo viene eseguito in un thread diverso, non nel thread principale . Non c'è documentazione java per OAuth 2.0, ma proverò e se non posso farlo chiederò qui. Ancora una volta, grazie mille e spero di aiutarti quando lavoro abbastanza. :)

+0

Fo Oauth 2.0, per favore passa questo http://blog.doityourselfandroid.com/2011/08/06/oauth-2-0-flow -android/ – Scorpion

+0

Mi dispiace tanto che ho messo la mia risposta perché è esattamente quello che ho fatto e ha funzionato per me che non significa che non hai aiutato È solo un modo per dire ad altre persone che è il modo di fare e aiutali. Grazie e scusa per i miei errori qui. E grazie anche per il collegamento Oauth 2.0, lo proverò. – user1680435

5

Codice di esempio per te senza OAuth 2.0. Ma è consigliato eseguire OAuth come buono per lo scopo di sicurezza. Devi anche aggiungere le autorizzazioni di seguito. Codice

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCOUNT_MANAGER"/> 
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

campione: -

try { 
    SpreadsheetEntry spreadsheet; 
    service = new SpreadsheetService("Spreadsheet"); 
    service.setProtocolVersion(SpreadsheetService.Versions.V3); 
    service.setUserCredentials("username", "password");//permission required to add in Manifest 
    URL metafeedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"); 
    feed = service.getFeed(metafeedUrl, SpreadsheetFeed.class); 

    List<SpreadsheetEntry> spreadsheets = feed.getEntries(); 
    if (spreadsheets.size() > 0) { 
     spreadsheet = spreadsheets.get(i);//Get your Spreadsheet 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Penso di non avere i giaretti indicati perché non sono in grado di creare una classe di foglio di calcolo come nella prima riga che hai messo lì. Non so che altro fare. L'unica opzione è quella di ricominciare tutto daccapo e farlo passo dopo passo – user1680435

+1

Calmati e non sentirti frustrato Rispondi ad alcune delle mie domande che hai incluso gdata-core-1.0.jar e guava-11.0.1.jar nel tuo progetto o no? – Scorpion

+1

Il mio errore in realtà è un SpreadsheetEntry not Spreadsheet.Aggiunga appena i 2jar che ho detto sopra se non aggiungete perché è necessario e quindi riprovare. Penso che funzionerà per te. – Scorpion

3

È un processo complesso, ma può essere fatto! Ho scritto un blog post su come ottenere le basi e funzionare. E ho anche pubblicato uno open-source project che è effettivamente utile, ma ancora abbastanza minimale. Utilizza OAuth e quindi può ottenere l'autorizzazione direttamente dal modello di autorizzazione di Android (nessuna email/password hardcoded!).

avete bisogno di qualcosa per iniziare la "Scegli conto intenti":

View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"}, 
       false, null, null, null, null); 
     startActivityForResult(intent, 1); 

     if (AUTO_HIDE) { 
      delayedHide(AUTO_HIDE_DELAY_MILLIS); 
     } 
     return false; 
    } 
}; 

E poi, quando che restituisce intenti, si può provare a utilizzare il token che è stato restituito (anche se nota, se è la prima volta che il utente può avere per autorizzare esplicitamente il vostro programma, questa è l'UserRecoverableAuthException):

protected void onActivityResult(final int requestCode, final int resultCode, 
     final Intent data) { 
    if (requestCode == 1 && resultCode == RESULT_OK) { 
     final String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
     System.err.println(accountName); 

     (new AsyncTask<String, String,String>(){ 
      @Override 
      protected String doInBackground(String... arg0) { 
       try { 
        // Turn account name into a token, which must 
        // be done in a background task, as it contacts 
        // the network. 
        String token = 
          GoogleAuthUtil.getToken(
            FullscreenActivity.this, 
            accountName, 
            "oauth2:https://spreadsheets.google.com/feeds https://docs.google.com/feeds"); 
        System.err.println("Token: " + token); 

        // Now that we have the token, can we actually list 
        // the spreadsheets or anything... 
        SpreadsheetService s = 
          new SpreadsheetService("Megabudget"); 
        s.setAuthSubToken(token); 

        // Define the URL to request. This should never change. 
        // (Magic URL good for all users.) 
        URL SPREADSHEET_FEED_URL = new URL(
         "https://spreadsheets.google.com/feeds/spreadsheets/private/full"); 

        // Make a request to the API and get all spreadsheets. 
        SpreadsheetFeed feed; 
        try { 
         feed = s.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class); 
         List<SpreadsheetEntry> spreadsheets = feed.getEntries(); 

         // Iterate through all of the spreadsheets returned 
         for (SpreadsheetEntry spreadsheet : spreadsheets) { 
          // Print the title of this spreadsheet to the screen 
          System.err.println(spreadsheet.getTitle().getPlainText()); 
         } 
        } catch (ServiceException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } catch (UserRecoverableAuthException e) { 
        // This is NECESSARY so the user can say, "yeah I want 
        // this app to have permission to read my spreadsheet." 
        Intent recoveryIntent = e.getIntent(); 
        startActivityForResult(recoveryIntent, 2); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (GoogleAuthException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       return null; 
      }}).execute(); 
    } else if (requestCode == 2 && resultCode == RESULT_OK) { 
     // After the user YAYs or NAYs our permission request, we are 
     // taken here, so if we wanted to grab the token now we could. 
    } 

} 
+0

Ho provato @ 2 nov 2015 a scaricare la tua app ma non ha funzionato –

+0

Hai scaricato l'app o hai provato a costruire dalla fonte? L'app sembra funzionare per me su Android M. Che cosa non ha funzionato? @DinIslamMilon –

+0

È come un fascino. oggi ho scaricato di nuovo la tua app da Play Store e ora funziona alla grande. Grazie. –

1

(Feb 2017) la domanda (e la maggior parte delle risposte) sono ora out-of-date: 1) GData APIs sono il gene precedente razione delle API di Google.Mentre non tutte le API GData sono state deprecate, all modern Google APIs do non utilizza the Google Data protocol, 2) Google released a new Google Sheets API (v4, non GData) nel 2016 e 3) Android Studio è ora l'IDE preferito su Eclipse. Per utilizzare le API di Google, è necessario ottenere the Google APIs Client Library for Android (o Java più generale, the Google APIs Client Library for Java). Ora sei pronto.

Per iniziare, l'ultimo Sheets API è molto più potente di tutte le versioni precedenti. L'ultima API fornisce funzionalità non disponibili nelle versioni precedenti, ovvero l'accesso programmatico agli sviluppatori a un foglio come se si stesse utilizzando l'interfaccia utente (creare file congelati, eseguire la formattazione delle celle, ridimensionare righe/colonne, aggiungere tabelle pivot, creare grafici, ecc.).

Detto questo, sì, è difficile quando non ci sono abbastanza buoni esempi (di lavoro) in circolazione, giusto? Nei documenti ufficiali, proviamo a mettere esempi "quickstart" in quante più lingue possibili per aiutarti a farti andare. In questo spirito, ecco lo Android quickstart code sample e il più generale Java Quickstart code sample. Per comodità, ecco lo Sheets API JavaDocs reference.

Un'altra risposta ha suggerito di utilizzare OAuth2 per l'autorizzazione dei dati, che si può fare con questo frammento di autenticazione dal QuickStart sopra, più il diritto scope:

// Sheets RO scope 
private static final String[] SCOPES = {SheetsScopes.SPREADSHEETS_READONLY}; 
    : 

// Initialize credentials and service object 
mCredential = GoogleAccountCredential.usingOAuth2(
     getApplicationContext(), Arrays.asList(SCOPES)) 
     .setBackOff(new ExponentialBackOff()); 

Se non sei "allergica" a Python, I 'Ho fatto diversi video con più esempi "reali" utilizzando il Fogli API (non mobile però):

Infine, si noti che i fogli API esegue documento funzionalità -oriented come descritto sopra. Per il file - accesso ai livelli, ad esempio importazione, esportazione, ecc., Utilizzare invece lo Google Drive API; in particolare per i dispositivi mobili, utilizzare Google Drive Android API. Spero che questo ti aiuti!

+0

hai qualche app Android di esempio che salverà i dati in Google Sheet e passerà da Sheet a visible.Io ho verificato il codice di esempio di google ancora sto ottenendo confusione riguardo a questo.Se conosci qualche esempio di collegamento post plz mi aiuterà molto . – YBDevi

+0

Non ne ho personalmente, ma oltre al Quickstart che ho collegato sopra, date un'occhiata a questo altro SO Q & A: http://stackoverflow.com/questions/40781620 – wescpy

+0

Grazie per il collegamento cercherò di ottenere informazioni da esso. – YBDevi