SkyDrive へ移動Google のライブラリのダウンロード gdata-java-client かなり多くのライブラリが中に入っていますが、実際使うのは 5つです。 1) gdata-client-1.0.jar 2) gdata-core-1.0.jar 3) gdata-spreadsheet-3.0.jar 4) guava-11.0.2.jar 5) jsr305.jar 1〜3 は、lib ディレクトリ内で、4〜5 は、deps 内です。Google 的には、gdata を使うのは spreadsheet のみのようで、他の機能( 例えばカレンダー ) は他の API を使うようになっています。また、認証も本来は OAuth を推奨しているようですが、機能の説明に重点を置くために、簡単にユーザーとパスワードのログインで処理しています。
![]()
package com.example.posttest;
import java.net.URL;
import java.util.List;
import com.google.gdata.client.spreadsheet.*;
import com.google.gdata.data.spreadsheet.*;
import com.google.gdata.util.*;
import android.os.AsyncTask;
import android.widget.EditText;
public class Android_Spreadsheet {
// AsyncTask のインラインで参照する為の final
private final String _userid;
private final String _password;
// **************************************************************
// コンストラクタ
// **************************************************************
public Android_Spreadsheet(String _userid, String _password) {
this._userid = _userid;
this._password = _password;
}
// **************************************************************
// AsyncTask の onPostExecute から外部イベントとして呼び出す為のインターフェイス
// **************************************************************
public interface SendMailed {
public void onTweetResult(List<CellEntry> result);
}
// **************************************************************
// 通信処理
// **************************************************************
public void GetCells(String FileName, String SheetName,final SendMailed OnTweetResult) {
new AsyncTask<String, Void, List<CellEntry>>() {
// **************************************************************
// 非同期処理
// **************************************************************
@Override
protected List<CellEntry> doInBackground(String... params) {
List<CellEntry> cells = null;
String result_string = "";
try {
// *************************************************
// ClientLogin
// *************************************************
String USERNAME = _userid;
String PASSWORD = _password;
SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1");
service.setUserCredentials(USERNAME, PASSWORD);
// *************************************************
// バージョン3
// *************************************************
SpreadsheetService sss = new SpreadsheetService("MySpreadsheetIntegration");
sss.setProtocolVersion(SpreadsheetService.Versions.V3);
// *************************************************
// 一覧を取得
// *************************************************
URL SPREADSHEET_FEED_URL = new URL(
"https://spreadsheets.google.com/feeds/spreadsheets/private/full");
SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
// 一覧用のリスト
List<SpreadsheetEntry> spreadsheets = feed.getEntries();
// スプレッドシート一覧より目的のインデックスを取得
int target = 0;
for (SpreadsheetEntry Spreadsheet : spreadsheets) {
System.out.println( Spreadsheet.getTitle().getPlainText() );
if ( Spreadsheet.getTitle().getPlainText().equals(params[0]) ) {
break;
}
target++;
}
SpreadsheetEntry spreadsheet = spreadsheets.get(target);
WorksheetFeed worksheetFeed = service.getFeed(
spreadsheet.getWorksheetFeedUrl(), WorksheetFeed.class);
List<WorksheetEntry> worksheets = worksheetFeed.getEntries();
target = 0;
for (WorksheetEntry worksheet : worksheets) {
System.out.println( worksheet.getTitle().getPlainText() );
if ( worksheet.getTitle().getPlainText().equals(params[1]) ) {
break;
}
target++;
}
WorksheetEntry worksheet = worksheets.get(target);
URL cellFeedUrl = worksheet.getCellFeedUrl();
CellFeed cellFeed = service.getFeed(cellFeedUrl, CellFeed.class);
cells = cellFeed.getEntries();
}
catch( Exception e ) {
System.out.println(e.getMessage());
}
return cells;
}
// **************************************************************
// 非同期処理終了後の処理( 画面へのアクセスが可能 )
// **************************************************************
@Override
protected void onPostExecute(List<CellEntry> result) {
// 引数のインターフェイス内のメソッドを呼び出す
OnTweetResult.onTweetResult(result);
}
}.execute(FileName,SheetName);
}
}
スプレッドシートの一覧や、シートの一覧等、それぞれで通信処理をするので、Android では AsyncTask を用いて全て一括で処理を行って、最後の一覧のみを終了イベントとして処理するようにしています。
package com.example.posttest;
import java.net.URL;
import java.util.List;
import com.example.posttest.Android_Spreadsheet;
import com.google.gdata.data.spreadsheet.CellEntry;
import com.google.gdata.data.spreadsheet.CellFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.WorksheetEntry;
import com.google.gdata.data.spreadsheet.WorksheetFeed;
import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends Activity {
private Android_Spreadsheet as = null;
private ArrayAdapter<String> adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
as = new Android_Spreadsheet(
"", // アカウント
"" // パスワード
);
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
}
public void postAction(View view) {
new MessageBox(this,"確認","送信しますか?") {
@Override
void onYesClick(DialogInterface dialog, int which) {
System.out.println("onYesClick");
as.GetCells( "In Googleドライブ", "シート2" ,new Android_Spreadsheet.SendMailed() {
@Override
public void onTweetResult(List<CellEntry> result) {
ListView listView = (ListView)MainActivity.this.findViewById(R.id.listView1);
listView.setAdapter(adapter);
for (CellEntry cell : result) {
adapter.add( cell.getCell().getValue().toString() );
// System.out.println( cell.getCell().getValue().toString() );
}
}
});
}
}.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 選択されたメニュー項目の ID
int menuId = item.getItemId();
switch(menuId){
case R.id.action_settings:
System.out.println("action_settings が選択されました");
break;
case R.id.menu_action1:
System.out.println("menu_action1 が選択されました");
Intent intent = new Intent();
intent.putExtra("data", "メッセージを別のページに引き渡します");
intent.setClassName("com.example.posttest", "com.example.posttest.NextPage");
startActivity(intent);
break;
}
return true;
}
}
|
|
【Androidの最新記事】
- デバイスを探す / Find My Device - Google / Android Find
- JavaScript から Android へアクセス
- Monaca と 本当の 『Onsen UI最小限のテンプレート』
- Android 5.1 リリース済み。SDK( android-sdk_r24.0.2-windows.zip ) でまずエミュレータ作って、あとから Eclipse と Android Studio..
- クラウドでアプリを作成してスマホで動作させる『Monaca』を Android エミュレータの 5.1 で動作確認しました
- Android で Post と Get
- 別の ADT(Android) で作成されたワークスペースを最新の ADT で開く場合の操作方法
- Android : ListView Twitter 検索テンプレート
- トラブル : AndroidManifest.xml に XML 宣言があるとエラーになる???
- Twitter API の自分のアプリのトークンを使って投稿するだけの class Android_Twitter
- Android 単純リストビューを google-gson で最速構築
- Android をテストするのにほんの少し楽になるかもしれないクラス
- Android 4.2.2(ADT) : class MyDatePicker extends DatePickerDialog
- Android : 日付ダイアログをインナーで使う( 完了ボタンをクリックした場合としない場合の対応 )
- Android(4.2.2) ADT から Post や Get をできるかぎり簡単にするサンプル
- Android ADT : 単純画面遷移
- HashMap の Key と Value をそれぞれソートして、最終的には 配列に変換して テンプレートを使って for ループを簡単に記述する
- ADT Eclipse : sysout テンプレートの変更
- Android(ADT Eclipse) 用 ボタンイベントテンプレート
- Android から Post 投稿 / HttpPostAndXml extends AsyncTask<Map, Void, Document>






