Android的ListView控件如何从一个谷歌小号preadsheet检索动态信息填充 [英] Android ListView how to populate with dynamic information retrieved from a google spreadsheet

查看:171
本文介绍了Android的ListView控件如何从一个谷歌小号preadsheet检索动态信息填充的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的Andr​​oid应用程序,从谷歌小号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 =htt​​ps://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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆