Как подключить приложения Android к таблицам Google Таблиц?
Я пытаюсь сделать Android-приложение, которое должно работать с Google spreadsheet API. Я новичок в этом, поэтому я начинаю с версии 3 api:https://developers.google.com/google-apps/spreadsheets/
Я выполнил все шаги, загрузил все файлы jar в lib
вложенную папку в папке проекта, а затем я добавил в путь сборки в Eclipse, как обычно. Поэтому, хотя нет примера Java для выполнения OAuth 2.0, я просто попытался объявить:
SpreadsheetService service = new SpreadsheetService("v1");
но когда я эмулирую эту простую строку, это дает мне ошибку:
java.lang.NoClassDefFoundError: com.google.gdata.client.spreadsheet.SpreadsheetService
Я использую все банки, включенные в документацию, и у меня есть импорт:
import com.google.gdata.client.spreadsheet.SpreadsheetService;
но я совершенно потерялся. Я не знаю, что еще сделать, чтобы просто начать, подключиться к Google APIs и работать с электронными таблицами.
4 ответов
пример кода для вас без OAuth 2.0. Но его рекомендуется выполнять OAuth как его благо для целей безопасности. Вы также должны добавить ниже разрешения.
<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"/>
Пример Кода:-
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();
}
спасибо так много Скорпионов! Работает!! Я слишком долго пытался. ОК, Вот мое решение: Я начал новый проект и включил эти банки:
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
и мой код:
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();
}
конечно, это выполняется в другом потоке, а не в основном потоке. Нет документации java для OAuth 2.0, но я попробую, и если я не смогу это сделать, я спрошу здесь. Еще раз большое спасибо, и я надеюсь помочь вам, когда я работаю на это время достаточно. :)
это сложный процесс, но это можно сделать! Я написал блоге о получении основы и работает. И я также опубликовал проект с открытым исходным кодом это на самом деле полезно, но все же довольно минимально. Он использует OAuth, и поэтому может вытащить разрешение непосредственно из модели разрешений Android (нет жестко закодированной электронной почты / пароля!).
вам нужно что-то, чтобы начать "выбрать намерение учетной записи":
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;
}
};
и затем, когда это намерение возвращает, вы можете попробовать использовать токен, который был возвращен (хотя обратите внимание, если это первый раз, когда пользователь может явно авторизовать вашу программу; это 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.
}
}
(2017 февраля) вопрос (и большинство ответов) теперь устарели как: 1)API Для Антивируса Avast являются предыдущим поколением Google APIs. Хотя не все API GData были устаревшими,все современные Google APIs do не использовать протокол данных Google, 2) Google выпущен новый API Google Таблиц (v4; не GData) в 2016 году, и 3) Android Studio теперь является предпочтительной IDE Затмение. Для того, чтобы использовать Google APIs, вам нужно получить клиентская библиотека Google APIs для Android (или для более общей Java, клиентская библиотека Google APIs для Java). Теперь вы готовы.
для начала, последний листы API намного мощнее, чем все старые версии. Последний API предоставляет функции, недоступные в старых версиях, а именно предоставление разработчикам программного доступа к листу, как если бы вы использовали пользовательский интерфейс (создание замороженных строк, форматирование ячеек, изменение размера строк / столбцов, добавление сводных таблиц, создание диаграмм и т. д.).
это сказало, Да, это сложно, когда нет достаточно хороших (рабочих) примеров, плавающих вокруг, не так ли? В официальных документах мы стараемся поместить примеры" быстрого запуска " на как можно большем количестве языков, чтобы помочь вам. В этом духе, вот образец кода быстрого запуска Android а также более общие пример кода быстрого запуска Java. Для удобство, вот листы API JavaDocs ссылка.
другой ответ предложил использовать OAuth2 для авторизации данных, что вы можете сделать с помощью этого фрагмента auth из быстрого запуска выше, плюс право область:
// 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());
Если у вас нет "аллергии" на Python, я сделал несколько видео с более" реальными " примерами, используя API листов (не мобильный, хотя):
- перенос данных SQL на лист (код глубокого погружения в должности)
- форматирование текста с помощью API листов (глубокое погружение код в должности)
- создание слайдов из данных электронных таблиц (глубокое погружение код в должности)
наконец, обратите внимание, что API листов выполняет документ-ориентированная функциональность, как описано выше. Для -уровень доступа, т. е., импорт, экспорт и т. д., вы использовали бы Google Drive API вместо этого; специально для мобильных устройств, используйте Google Drive Android API. Надеюсь, это поможет!