📜  如何从Android中的Google Spreadsheet读取数据?(1)

📅  最后修改于: 2023-12-03 15:08:14.876000             🧑  作者: Mango

如何从Android中的Google Spreadsheet读取数据

Google Spreadsheet是Google提供的一款在线电子表格工具,可以让用户在任何设备上创建、编辑和分享电子表格。在Android应用程序中,我们可以通过Google API来读取Google Spreadsheet中的数据,这个过程为RESTful API。

下面介绍如何使用Google API在Android中读取Google Spreadsheet中的数据。

步骤一:创建Google API项目并获取凭证
  1. 登录Google API Console
  2. 创建一个新的API项目。
  3. 开启Google Sheets API。
  4. 创建OAuth 2.0凭证。选择“Android”平台并根据指导开启认证。
  5. 记下客户端ID和客户端密钥,稍后将用到。
步骤二:添加依赖项

在项目的build.gradle文件中添加以下依赖项:

dependencies {
    implementation 'com.google.api-client:google-api-client:1.30.6'
    implementation 'com.google.oauth-client:google-oauth-client-jetty:1.30.6'
    implementation 'com.google.apis:google-api-services-sheets:v4-rev581-1.30.6'
}
步骤三:授权访问Google Sheets API

在你的Activity或Fragment中添加以下代码:

private static final int REQUEST_AUTHORIZATION = 1;

public void accessSpreadsheet() {
    final HttpTransport transport = AndroidHttp.newCompatibleTransport();
    final JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
    
    // Google Credential对象用于授权身份验证
    final GoogleCredential credential = new GoogleCredential.Builder()
            .setJsonFactory(jsonFactory)
            .setTransport(transport)
            .setClientSecrets(CLIENT_ID, CLIENT_SECRET) // 替换为你自己的客户端ID和客户端密钥
            .build();

    // 配置授权方式
    credential.setAccessToken(accessToken);
    credential.setRefreshToken(refreshToken);

    // Google Sheets API对象
    final Sheets api = new Sheets.Builder(transport, jsonFactory, credential)
            .setApplicationName("My Application")
            .build();

    // 指定读取数据的电子表格ID和范围
    final String spreadsheetId = "my-spreadsheet-id";
    final String range = "Sheet1!A1:B2";
    
    // 发起请求
    new AsyncTask<Void, Void, List<List<Object>>>() {

        @Override
        protected List<List<Object>> doInBackground(Void... voids) {
            try {
                final ValueRange response = api.spreadsheets().values().get(spreadsheetId, range).execute();
                return response.getValues();
            } catch (IOException e) {
                Log.e(TAG, "Error accessing spreadsheet", e);
                return null;
            }
        }

        @Override
        protected void onPostExecute(List<List<Object>> values) {
            if (values != null) {
                // 处理读取到的数据
            }
        }
    }.execute();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 处理OAuth认证结果
    if (requestCode == REQUEST_AUTHORIZATION && resultCode == RESULT_OK) {
        TokenResponse response = (TokenResponse) data.getExtras().get("response");
        if (response != null) {
            accessToken = response.getAccessToken();
            refreshToken = response.getRefreshToken();
            accessSpreadsheet();
        }
    }
}

在这个代码片段中,我们使用GoogleCredential对象来进行身份验证,并使用TokenResponse来获取访问令牌和刷新令牌。我们也配置了Sheet对象来访问具体的电子表格和范围。我们把这个操作放到了doInBackground中以保证不阻塞主线程。

步骤四:请求授权

在你的Activity或Fragment中启动授权请求。例如,这里我们使用Google Sign-In的方式来请求授权:

public void signIn() {
    final GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestId()
            .requestScopes(new Scope(SheetsScopes.SPREADSHEETS_READONLY))
            .build();

    final GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
    startActivityForResult(signInClient.getSignInIntent(), REQUEST_AUTHORIZATION);
}
总结

通过以上几步,我们可以在Android中轻松地读取Google Spreadsheet中的数据。需要注意的是,如果你想向Spreadsheet写入数据,需要使用spreadsheets().values().update()方法。此外,请确保你的Google账号有访问电子表格的权限,并且你的访问令牌和刷新令牌被正确地处理。