Android的ListView控件如何从一个谷歌小号preadsheet检索动态信息填充 [英] Android ListView how to populate with dynamic information retrieved from a google spreadsheet
问题描述
我工作的Android应用程序,从谷歌小号preadsheet需要的信息,并提出在一个列表视图。然而,我无法想出一个解决方案。
任何帮助将大大AP preciated。
对于s preadsheet整合我使用谷歌API表。
我知道客户端登录是不是安全的,但是这仅仅是项目目的的测试程序:)
下面是我的code是什么样子 -
包com.bish.test;进口android.support.v7.app.ActionBarActivity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.ListView;
进口android.widget.Toast;
进口android.app.Activity;
进口android.app.ProgressDialog;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ArrayAdapter;
进口android.widget.GridView;
进口android.widget.ListView;
进口android.widget.Toast;导入com.google.gdata.client.authn.oauth *。
进口com.google.gdata.client.s preadsheet *。
导入com.google.gdata.data *。
导入com.google.gdata.data.batch *。
进口com.google.gdata.data.s preadsheet *。
导入com.google.gdata.util *。进口java.io.IOException异常;
进口java.net *。
进口的java.util。*;公共类MainActivity扩展ActionBarActivity { US preadsheetService服务=全新S preadsheetService(角preadsheetIntegration-V1);
字符串username =cccc@gmail.com;
字符串密码=XXX;
ListView控件列表;
的String []网络;
整数[] imageId;
CustomList适配器; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); 登录(); 尝试{
refreshData();
}赶上(IOException异常五){
e.printStackTrace();
}赶上(ServiceException E){
e.printStackTrace();
} 适配器=新CustomList(MainActivity.this,网络,imageId);
名单=(ListView控件)findViewById(R.id.list);
list.setAdapter(适配器); } @覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.main,菜单);
返回true;
} @覆盖
公共布尔onOptionsItemSelected(菜单项项){
//处理动作栏项目点击这里。操作栏会
//自动处理上点击主页/向上按钮,只要
//你在AndroidManifest.xml中指定一个父活动。
INT ID = item.getItemId();
如果(ID == R.id.action_settings){
返回true;
}
返回super.onOptionsItemSelected(项目);
} 公共无效登录()
{
最后ProgressDialog ringProgressDialog = ProgressDialog.show(MainActivity.this,请稍候...,登录...,真正的);
ringProgressDialog.setCancelable(真);
新主题(新的Runnable接口(){
@覆盖
公共无效的run(){
尝试{
service.setUserCredentials(用户名,密码);
视频下载(2200);
}赶上(例外五){
Toast.makeText(getApplicationContext()!ERROR:检查您的Internet连接,Toast.LENGTH_LONG).show();
e.printStackTrace();
System.exit(0);
}
ringProgressDialog.dismiss();
}
})。开始();
} 公共无效refreshData()抛出的AuthenticationException,MalformedURLException的,IOException异常,ServiceException
{ }}
我希望这会帮助你。
这code:
1)创建新的S preadsheet
2)插入新工作表
3)在细胞中插入一些值
4)从细胞显示值
进口com.google.gdata.client.s preadsheet.FeedURLFactory;
进口com.google.gdata.data.s preadsheet.Cell;
进口com.google.gdata.data.s preadsheet.CellEntry;
进口com.google.gdata.data.s preadsheet.CellFeed;
进口com.google.gdata.data.s preadsheet.CustomElementCollection;
进口com.google.gdata.data.s preadsheet.ListEntry;
进口com.google.gdata.data.s preadsheet.ListFeed;
进口com.google.gdata.data.s preadsheet.S preadsheetFeed;
进口com.google.gdata.data.s preadsheet.WorksheetEntry;
进口com.google.gdata.util.ServiceException;
新的AsyncTask<太虚,太虚,太虚>(){@覆盖
保护无效doInBackground(虚空...... PARAMS){
最后弦乐SCOPE =https://docs.google.com/feeds/default/private/full;
最后弦乐全权证书= sessionManager.getCredentials()getSelectedAccountName()。 //创建新的Google US preADSHEET与相应的名称
US preadsheetEntry新条目=全新S preadsheetEntry();
newEntry.setTitle(新PlainTextConstruct(Constants.FILE_ preFIX + mFileName)); 网址URL = NULL;
尝试{
Log.d(TAG,CRED:+凭证);
URL =新的URL(SCOPE + +凭证xoauth_requestor_id =?); //插入的文件
US preadsheetService.insert(网址,新条目);
}赶上(MalformedURLException的E){
Log.d(TAGMalformedURLException的:+ e.getMessage());
}赶上(IOException异常五){
Log.d(TAGIOException异常:+ e.getMessage());
}赶上(ServiceException E){
Log.d(TAGServiceException:+ e.getMessage());
}赶上(抛出:IllegalArgumentException五){
//我收到不被支持EXCEPTION介质,而文件被创建!!!!
Log.d(TAG抛出:IllegalArgumentException:+ e.getMessage());
}赶上(例外五){
Log.d(TAG,异常:+ e.getMessage());
}
尝试{
//获得所有文件从用户的Google云端硬盘
US preadsheetFeed饲料= S preadsheetService.getFeed(
FeedURLFactory.getDefault()
.getS preadsheetsFeedUrl()
US preadsheetFeed.class);
//创建小号preasheets在GDrive的列表
清单< com.google.gdata.data.s preadsheet.S preadsheetEntry> US preadsheets = feed.getEntries(); //解析槽饲料项目
的for(int i = 0; I< S preadsheets.size();我++){
com.google.gdata.data.s preadsheet.S preadsheetEntry E =(com.google.gdata.data.s preadsheet.S preadsheetEntry)■preadsheets.get(一世);
//如果找到该文件,根据文件名
如果(e.getTitle()。getPlainText()。等于(Constants.FILE_ preFIX + mFileName)){ Log.d(TAG条目:+ e.getTitle()getPlainText()); 网址worksheetFeedUrl = e.getWorksheetFeedUrl(); Log.d(TAG,worksheetFeedUrl:+ worksheetFeedUrl); //第一次这个饲料用于创建新的工作表
WorksheetFeed worksheetFeed = S preadsheetService.getFeed(worksheetFeedUrl,WorksheetFeed.class); Log.d(TAGworksheetFeed OK!); //创建第二个工作表
WorksheetEntry newWorksheet =新WorksheetEntry(15,5);
newWorksheet.setTitle(新PlainTextConstruct(Sheet2的));
worksheetFeed.insert(newWorksheet); //第二次这个feed是用来获取工作表
worksheetFeed = S preadsheetService.getFeed(worksheetFeedUrl,WorksheetFeed.class); //获取第一个工作表,然后插入标题
清单< WorksheetEntry> worksheetEntrys = worksheetFeed.getEntries();
WorksheetEntry工作表Sheet1 = worksheetEntrys.get(0);
WorksheetEntry Sheet 2中= worksheetEntrys.get(1); 网址sheet1CellFeedUrl = sheet1.getCellFeedUrl();
CellFeed sheet1CellFeed = S preadsheetService.getFeed(sheet1CellFeedUrl,CellFeed.class); sheet1CellFeed.insert(新CellEntry(1,1,getResources()的getString(R.string.cell_title_name))。);
sheet1CellFeed.insert(新CellEntry(1,2,getResources()的getString(R.string.cell_title_description))。);
sheet1CellFeed.insert(新CellEntry(3,2,getResources()的getString(R.string.some_string))。);
sheet1CellFeed.insert(新CellEntry(13,2,= COUNTIF(工作表Sheet1 F2:楼B3)));
sheet1CellFeed.insert(新CellEntry(14,2,= B9 - TODAY()));
//从细胞中的含量从第二个工作表
网址sheet2CellFeedUrl = sheet2.getCellFeedUrl();
CellFeed sheet2CellFeed = S preadsheetService.getFeed(sheet2CellFeedUrl,CellFeed.class); 清单< CellEntry> cellEntryList = sheet2CellFeed.getEntries();
如果(cellEntryList =空&放大器;!&放大器;!cellEntryList.isEmpty()){
对于(CellEntry cellEntry:cellEntryList){
电池单元= cellEntry.getCell();
Log.d(TAG,VALUE+ cell.getValue());
}
} 打破;
}
}
}赶上(例外五){
Log.d(TAG,异常:+ e.getMessage());
runOnUiThread(新的Runnable(){ @覆盖
公共无效的run(){
showMessage(错误!);
}
});
} 返回null;
}
}。执行();
I'm working on an android app that takes information from a google spreadsheet and puts in on a list view. However, I'm unable to come up with a solution for this. Any help would greatly be appreciated. For spreadsheet integration I use the Google Sheets API. I know client login is not secure, but this is just a test app for project purposes :)
Here is what my code looks like -
package com.bish.test;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.Toast;
import com.google.gdata.client.authn.oauth.*;
import com.google.gdata.client.spreadsheet.*;
import com.google.gdata.data.*;
import com.google.gdata.data.batch.*;
import com.google.gdata.data.spreadsheet.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.*;
import java.util.*;
public class MainActivity extends ActionBarActivity {
SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1");
String USERNAME = "cccc@gmail.com";
String PASSWORD = "xxx";
ListView list;
String[] web;
Integer[] imageId;
CustomList adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
logIn();
try {
refreshData();
} catch (IOException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
adapter = new CustomList(MainActivity.this, web, imageId);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void logIn()
{
final ProgressDialog ringProgressDialog = ProgressDialog.show(MainActivity.this, "Please wait ...", "Logging In...", true);
ringProgressDialog.setCancelable(true);
new Thread(new Runnable() {
@Override
public void run() {
try {
service.setUserCredentials(USERNAME, PASSWORD);
Thread.sleep(2200);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "ERROR: Check your Internet Connection!", Toast.LENGTH_LONG).show();
e.printStackTrace();
System.exit(0);
}
ringProgressDialog.dismiss();
}
}).start();
}
public void refreshData() throws AuthenticationException, MalformedURLException, IOException, ServiceException
{
}
}
I hope this will help you. This code:
1) Creates a new Spreadsheet
2) Inserts a new Worksheet
3) Inserts some values in the cells
4) Displays the values from the cells
import com.google.gdata.client.spreadsheet.FeedURLFactory;
import com.google.gdata.data.spreadsheet.Cell;
import com.google.gdata.data.spreadsheet.CellEntry;
import com.google.gdata.data.spreadsheet.CellFeed;
import com.google.gdata.data.spreadsheet.CustomElementCollection;
import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.data.spreadsheet.ListFeed;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.gdata.data.spreadsheet.WorksheetEntry;
import com.google.gdata.util.ServiceException;
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
final String SCOPE = "https://docs.google.com/feeds/default/private/full";
final String CREDENTIALS = sessionManager.getCredentials().getSelectedAccountName();
// CREATE A NEW GOOGLE SPREADSHEET WITH THE CORRESPONDING NAME
SpreadsheetEntry newEntry = new SpreadsheetEntry();
newEntry.setTitle(new PlainTextConstruct(Constants.FILE_PREFIX + mFileName));
URL url = null;
try {
Log.d(TAG, "CRED: " + CREDENTIALS);
url = new URL (SCOPE + "?xoauth_requestor_id=" + CREDENTIALS);
// INSERT THE FILE
spreadsheetService.insert(url, newEntry);
} catch (MalformedURLException e) {
Log.d(TAG, "MalformedURLException: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "IOException: " + e.getMessage());
} catch (ServiceException e) {
Log.d(TAG, "ServiceException: " + e.getMessage());
} catch (IllegalArgumentException e) {
// I RECEIVE MEDIA NOT SUPPORTED EXCEPTION, BUT THE FILE IS CREATED!!!!
Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
} catch (Exception e) {
Log.d(TAG, "Exception: " + e.getMessage());
}
try {
// GET ALL THE FILES FROM THE USER'S GOOGLE DRIVE
SpreadsheetFeed feed = spreadsheetService.getFeed(
FeedURLFactory.getDefault()
.getSpreadsheetsFeedUrl(),
SpreadsheetFeed.class);
// Creating the list of spreasheets in GDrive
List<com.google.gdata.data.spreadsheet.SpreadsheetEntry> spreadsheets = feed.getEntries();
// parsing trough the feed entries
for (int i = 0; i < spreadsheets.size(); i++) {
com.google.gdata.data.spreadsheet.SpreadsheetEntry e = (com.google.gdata.data.spreadsheet.SpreadsheetEntry) spreadsheets.get(i);
// IF WE LOCATE THE FILE BASED ON THE FILENAME
if( e.getTitle().getPlainText().equals(Constants.FILE_PREFIX + mFileName)) {
Log.d(TAG, "ENTRY: " + e.getTitle().getPlainText());
URL worksheetFeedUrl = e.getWorksheetFeedUrl();
Log.d(TAG, "worksheetFeedUrl: " + worksheetFeedUrl);
// The first time this feed is used to create the new worksheet
WorksheetFeed worksheetFeed = spreadsheetService.getFeed (worksheetFeedUrl, WorksheetFeed.class);
Log.d(TAG, "worksheetFeed OK !");
// Create the second worksheet
WorksheetEntry newWorksheet = new WorksheetEntry(15, 5);
newWorksheet.setTitle(new PlainTextConstruct("Sheet2"));
worksheetFeed.insert(newWorksheet);
// The second time this feed is used to get the worksheets
worksheetFeed = spreadsheetService.getFeed (worksheetFeedUrl, WorksheetFeed.class);
// Get the first worksheet and insert the titles
List <WorksheetEntry> worksheetEntrys = worksheetFeed.getEntries ();
WorksheetEntry sheet1 = worksheetEntrys.get(0);
WorksheetEntry sheet2 = worksheetEntrys.get(1);
URL sheet1CellFeedUrl = sheet1.getCellFeedUrl ();
CellFeed sheet1CellFeed = spreadsheetService.getFeed (sheet1CellFeedUrl, CellFeed.class);
sheet1CellFeed.insert (new CellEntry (1, 1, getResources().getString(R.string.cell_title_name)));
sheet1CellFeed.insert (new CellEntry (1, 2, getResources().getString(R.string.cell_title_description)));
sheet1CellFeed.insert (new CellEntry (3, 2, getResources().getString(R.string.some_string)));
sheet1CellFeed.insert (new CellEntry (13, 2, "=COUNTIF(Sheet1!F2:F,B3)"));
sheet1CellFeed.insert (new CellEntry (14, 2, "=B9 - TODAY()"));
// GET THE CONTENT FROM THE CELLS FROM THE SECOND WORKSHEET
URL sheet2CellFeedUrl = sheet2.getCellFeedUrl ();
CellFeed sheet2CellFeed = spreadsheetService.getFeed (sheet2CellFeedUrl, CellFeed.class);
List<CellEntry> cellEntryList = sheet2CellFeed.getEntries();
if(cellEntryList != null && !cellEntryList.isEmpty()) {
for (CellEntry cellEntry : cellEntryList) {
Cell cell = cellEntry.getCell();
Log.d(TAG, "VALUE:" + cell.getValue());
}
}
break;
}
}
} catch (Exception e) {
Log.d(TAG, "Exception: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
showMessage("Error!");
}
});
}
return null;
}
}.execute();
这篇关于Android的ListView控件如何从一个谷歌小号preadsheet检索动态信息填充的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!