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>