Я изучаю кусочки 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());
> }
> }
> } }