Руководство по процессу подключения к API таблиц Google с помощью Android Studio - PullRequest
0 голосов
/ 04 ноября 2018

Я изучаю кусочки Android Studio и все еще новичок. Я имею в виду программу, использующую данные, взятые из электронной таблицы Google.

Я прочитал эту сеть: https://developers.google.com/sheets/api/guides/concepts и успешно воспроизвел примеры для Java и Python. Но когда я пытаюсь выполнить этот шаг в Android, происходит сбой: https://developers.google.com/gsuite/guides/android

Я думаю, что мне нужно дополнительное обучение, и было бы полезно привести полный пример. Так что, пожалуйста, можете ли вы провести меня через этот процесс? В чем я терплю неудачу?

Что я сделал и ошибка:

  • библиотеки, добавленные в зависимости, build.gradle (модуль приложения)

реализация fileTree (dir: 'libs', include: ['* .jar']) реализация 'com.android.support:appcompat-v7:28.0.0' реализация 'Com.android.support.constraint: ограничение-макет: 1.1.3' testImplementation 'junit: junit: 4.12' androidTestImplementation 'com.android.support.testrunning_man1.0.2' androidTestImplementation 'Com.android.support.test.espresso: эспрессо-ядро: 3.0.2'

// Bibliotecas para conectar con Google Sheet реализация Реализация 'com.google.android.gms: play-services-auth: 16.0.1' 'Pub.devrel: easypermissions: 0.3.0' реализация ( 'com.google.api-клиент: Google-апи-клиент-андроид: 1.23.0') {исключить группу: 'org.apache.httpcomponents'} реализации ( 'com.google.apis: Google-API-сервис-листы: v4-rev505-1.23.0') {исключить группу: 'org.apache.httpcomponents'} // Фальтаба Эст Biblioteca !!!!!!!!!!!!!!!!!!!!!!!!!!! реализация 'com.google.oauth-client: google-oauth-client-jetty: 1.23.0' //

  • Предоставление разрешения в манифесте
<!--permissions added for spreadsheet v4 api-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
  • файл credentials.json скопирован в папку app / src / main / res.

Программа синхронизирована и собрана успешно, но при запуске в эмуляторе возникает ошибка, которая заставляет приложение закрываться.

После отладки я обнаружил ошибку в строке 78-79 файла de MainActivity.Java, AppCompatViewInflater.class. Отображается второе исключение: «Не удалось выполнить метод для Android: onClick»

> public void onClick(@NonNull View v) { if (this.mResolvedMethod ==
> null) { this.resolveMethod(this.mHostView.getContext(),
> this.mMethodName); }
> 
>         try {
>             this.mResolvedMethod.invoke(this.mResolvedContext, v);
>         } catch (IllegalAccessException var3) {
>             throw new IllegalStateException("Could not execute non-public method for android:onClick", var3);
>         } catch (InvocationTargetException var4) {
>             throw new IllegalStateException("Could not execute method for android:onClick", var4);
>         }
>     }

=============================================== ===============

My MainActivity.java:

> package es.seritium.aurelio.conectandocongooglesheet;
> 
> import android.support.v7.app.AppCompatActivity; import
> android.os.Bundle; import android.view.View; import
> android.widget.TextView; import android.widget.Toast;
> 
> import com.google.api.client.auth.oauth2.Credential; import
> com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
> import
> com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
> import
> com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
> import
> com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
> import
> com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
> import com.google.api.client.http.javanet.NetHttpTransport; import
> com.google.api.client.json.JsonFactory; import
> com.google.api.client.json.jackson2.JacksonFactory; import
> com.google.api.client.util.store.FileDataStoreFactory; import
> com.google.api.services.sheets.v4.Sheets; import
> com.google.api.services.sheets.v4.SheetsScopes; import
> com.google.api.services.sheets.v4.model.ValueRange;
> 
> import java.io.IOException; import java.io.InputStream; import
> java.io.InputStreamReader; import
> java.security.GeneralSecurityException; import java.util.Collections;
> import java.util.List;
> 
> 
> public class MainActivity extends AppCompatActivity {
> 
>     private TextView tv1;
> 
>     public static final String APPLICATION_NAME = "Google Sheets API Java Quickstart";
>     public static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
>     public static final String TOKENS_DIRECTORY_PATH = "tokens";
> 
>     /**
>      * Global instance of the scopes required by this quickstart.
>      * If modifying these scopes, delete your previously saved tokens/ folder.
>      */
>     public static final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS_READONLY);
>     public static final String CREDENTIALS_FILE_PATH = "credentials.json";
> 
>     /**
>      * Creates an authorized Credential object.
>      * @param HTTP_TRANSPORT The network HTTP Transport.
>      * @return An authorized Credential object.
>      * @throws IOException If the credentials.json file cannot be found.
>      */
>     public static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
>         // Load client secrets.
>         InputStream in = MainActivity.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
>         GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
> 
>         // Build flow and trigger user authorization request.
>         GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
>                 HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
>                 .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
>                 .setAccessType("offline")
>                 .build();
>         LocalServerReceiver receier = new LocalServerReceiver.Builder().setPort(8888).build();
>         return new AuthorizationCodeInstalledApp(flow, receier).authorize("user");
>     }
> 
>     @Override
>     protected void onCreate(Bundle savedInstanceState) {
>         super.onCreate(savedInstanceState);
>         setContentView(R.layout.activity_main);
> 
>         tv1 = findViewById(R.id.tv1);
>     }
> 
>     public void Conectar(View view) throws IOException , GeneralSecurityException {
>         Toast.makeText(this,"hasta aquí parece que...",Toast.LENGTH_LONG);
>         // Build a new authorized API client service.
>         NetHttpTransport HTTP_TRANSPORT=null;
>         HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
>         final String spreadsheetId = "1uBL4vpKQHoTJdaLRC_wZLthVKObGjQJck8_q96D4af8";
>         final String range = "datos!A2:C5";
>         Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
>                 .setApplicationName(APPLICATION_NAME)
>                 .build();
>         ValueRange response = service.spreadsheets().values()
>                 .get(spreadsheetId, range)
>                 .execute();
>         List<List<Object>> values = response.getValues();
>         if (values == null || values.isEmpty()) tv1.setText("No he encontrado datos");
>         else {
>             tv1.setText("Id, Nombre, Datos");
>             for (List row : values) {
>                 // Print columns A and E, which correspond to indices 0 and 4.
>                 // System.out.printf("%s, %s, %s\n", row.get(0), row.get(1),row.get(2));
>                 tv1.setText(tv1.getText().toString()+"\n"+row.get(0).toString()
>                     +", "+row.get(1).toString()+", "+row.get(2).toString());
>             }
>         }
>     } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...