Java 使用处理语言进行数据可视化时发生身份验证错误

Java 使用处理语言进行数据可视化时发生身份验证错误,java,processing,data-visualization,Java,Processing,Data Visualization,我正在以下URL上编写数据可视化教程: 我得到这个错误,我完全不确定是什么原因造成的 com.google.gdata.util.AuthenticationException:连接登录URI时出错身份验证中出错 这是我目前的代码: MyRandomNumbers文件 SimpleSpreadsheetManager sm; String sUrl = "t6mq_WLV5c5uj6mUNSryBIA"; String googleUser = "xxxxxxx"; String google

我正在以下URL上编写数据可视化教程:

我得到这个错误,我完全不确定是什么原因造成的

com.google.gdata.util.AuthenticationException:连接登录URI时出错身份验证中出错

这是我目前的代码:

MyRandomNumbers文件

SimpleSpreadsheetManager sm;
String sUrl = "t6mq_WLV5c5uj6mUNSryBIA";
String googleUser = "xxxxxxx";
String googlePass = "xxxxxxx";

void setup() {
 size(800,800);
 background(0);
 smooth();

 //Ask for list of numbers
 int[] numbers = getNumbers();

 fill(255,40);
 noStroke();
 for(int i = 0; i < numbers.length; i++){
    ellipse(numbers[i] * 8, width/2, 8,8); 
 }

};

void draw() {
};
SimpleSpreadsheetManager sm;
字符串sUrl=“t6mq_WLV5c5uj6mUNSryBIA”;
字符串googleUser=“xxxxxxx”;
字符串googlePass=“xxxxxxx”;
无效设置(){
尺寸(800800);
背景(0);
光滑的();
//询问号码表
int[]numbers=getNumbers();
填充(255,40);
仰泳();
for(int i=0;i
谷歌代码文件

//Function to get an Array of integers from a Google Spreadsheet
  int[] getNumbers() {
      println("Asking Google for numbers...");
      sm = new SimpleSpreadsheetManager();
      sm.init("RandomNumbers", googleUser, googlePass);
      sm.fetchSheetByKey(sUrl, 0);

      int n = sm.currentListEntries.size();
      int[] returnArray = new int[n];
      for (int i = 0; i < n; i++) {
         returnArray[i] = int(sm.getCellValue("Number", i));
      };
      println("Got " + n + " numbers.");
      return(returnArray);
  };

  //Function to generate a random list of integers
  int[] getRandomNumbers(int c) {

      int[] returnArray = new int[c];
      for (int i = 0; i < c; i++) {
         returnArray[i] = ceil(random(0,99));
      };
      return(returnArray);
  };
//从Google电子表格中获取整数数组的函数
int[]getNumbers(){
println(“向谷歌索要数字…”);
sm=新的SimpleSpreadsheetManager();
sm.init(“随机数”,谷歌用户,谷歌通行证);
sm.fetchSheetByKey(sUrl,0);
int n=sm.currentListEntries.size();
int[]returnArray=新的int[n];
对于(int i=0;i
SimpleSpreadsheetManager

public class SimpleSpreadsheetManager {

  SpreadsheetService myService;
  SpreadsheetEntry spreadsheetEntry;
  SpreadsheetFeed sheetFeed;
  WorksheetEntry worksheetEntry;

  List spreadsheets;

  String user;
  String pass;

  ListFeed currentListFeed;
  CellFeed currentCellFeed;
  List currentCells;
  List currentListEntries;

  int currentTotalRows;
  int currentTotalCols;

  String currentTitle;
  String[] tagArray;

  URL listFeedUrl;


  SimpleSpreadsheetManager() {

  };

  /*

  INIT FUNCTION
  Opens session, uses username & password for authentication

  */

  void init(String sessionName, String u, String p) {
    user = u;
    pass = p;
    myService = new SpreadsheetService(sessionName);
    try {
      myService.setUserCredentials(user, pass);
    } 
    catch (Exception e) {
      println(e + " ERROR IN AUTHENTICATION");
    };

  };

  /*

  FETCH SHEET BY KEY
  Gets a spreadsheet listfeed using the unique key - this is in the URL of the spreadsheet
  The retrieved sheet is both returned and set as the currentListFeed

  */

  ListFeed fetchSheetByKey(String k, int wi) {

    ListFeed f = new ListFeed();
    CellFeed cf = new CellFeed();
    WorksheetFeed w = new WorksheetFeed();

    //GET WORKSHEETS FEED
    try {
      URL worksheetFeedUrl = new URL("https://spreadsheets.google.com/feeds/worksheets/" + k + "/private/full");
      WorksheetFeed wf2 = new WorksheetFeed();
      w = myService.getFeed(worksheetFeedUrl, wf2.getClass());
    }
    catch(Exception e) {
      println("ERROR RETRIEVING WORKSHEET FEED");
    };

    List worksheets = w.getEntries();
    WorksheetEntry we = (WorksheetEntry) worksheets.get(wi);   
    println("RETRIEVED WORKSHEET " + we.getTitle().getPlainText()); 

    //GET LIST FEED URL
    try {
      listFeedUrl = we.getListFeedUrl();//new URL("http://spreadsheets.google.com/feeds/list/" + k + "/od6/private/full");
      ListFeed lf2 = new ListFeed();
      f = myService.getFeed(listFeedUrl, lf2.getClass());
    }
    catch(Exception e) {
      println("ERROR RETRIEVING LIST FEED");
    };

    //GET CELL FEED
    try {
      URL cellFeedUrl = we.getCellFeedUrl();//new URL("http://spreadsheets.google.com/feeds/cells/" + k + "/od6/private/full");
      CellFeed lf2 = new CellFeed();
      cf = myService.getFeed(cellFeedUrl, lf2.getClass());

    }
    catch(Exception e) {
      println("ERROR RETRIEVING LIST FEED");
    };

    currentListFeed = f;
    currentCellFeed = cf;
    currentCells = cf.getEntries();
    currentListEntries = f.getEntries();

    currentTitle = we.getTitle().getPlainText();
    currentTotalRows = currentListEntries.size();
   if (currentListEntries.size() > 0) {
    ListEntry le = (ListEntry) currentListEntries.get(0);  
    currentTotalCols = le.getCustomElements().getTags().size();

    Set<String> tags = le.getCustomElements().getTags();
    tagArray = new String[tags.size()];
    tagArray = tags.toArray(tagArray);
   };

    return(f);
  };

  /*

  GET CELL VALUE
  Returns the value held in an individual sheet cell.

  */

  String getCellValue(int c, int r) {

    ListEntry le = (ListEntry) currentListEntries.get(r);    
    Set<String> tags = le.getCustomElements().getTags();
    String[] tagArray = new String[tags.size()];
    tagArray = tags.toArray(tagArray);

    return(le.getCustomElements().getValue(tagArray[c]));

  };

  String getCellValue(String tag, int r) {

    ListEntry le = (ListEntry) currentListEntries.get(r);    
    return(le.getCustomElements().getValue(tag));

  };

  void setCellValue(String tag, int r, String val) {

    ListEntry le = (ListEntry) currentListEntries.get(r);    
    le.getCustomElements().setValueLocal(tag, val);
    try {
      ListEntry updatedRow = le.update();
    }
    catch (Exception e){

    };

  };

  void setNewCellValue(String tag, int r, String val) {

    ListEntry le = new ListEntry();  

    try {
     le.getCustomElements().setValueLocal(tag, val);
     ListEntry insertedRow = myService.insert(listFeedUrl, le);
      ListEntry updatedRow = insertedRow.update();
    }
    catch (Exception e){

    };

  };

};
公共类SimpleSpreadsheetManager{
电子表格服务;
电子表格输入电子表格输入;
电子表格;
工作表工作表;
列出电子表格;
字符串用户;
串通;
ListFeed当前ListFeed;
CellFeed当前CellFeed;
列出当前单元格;
列出当前列表条目;
int currentTotalRows;
int currentTotalCols;
字符串标题;
字符串[]标记数组;
URL listFeedUrl;
SimpleSpreadsheetManager(){
};
/*
初始化函数
打开会话,使用用户名和密码进行身份验证
*/
void init(字符串sessionName、字符串u、字符串p){
用户=u;
通过=p;
myService=新的电子表格服务(sessionName);
试一试{
setUserCredentials(用户,通过);
} 
捕获(例外e){
println(e+“身份验证错误”);
};
};
/*
用钥匙取纸
使用唯一键获取电子表格listfeed-该键位于电子表格的URL中
检索到的工作表将被返回并设置为currentListFeed
*/
ListFeed fetchSheetByKey(字符串k,整数wi){
ListFeed f=新ListFeed();
CellFeed cf=新的CellFeed();
工作表进纸w=新工作表进纸();
//获取工作表提要
试一试{
URL工作表FeedUrl=新URL(“https://spreadsheets.google.com/feeds/worksheets/“+k+”/private/full”);
工作表进纸wf2=新工作表进纸();
w=myService.getFeed(工作表feedurl,wf2.getClass());
}
捕获(例外e){
println(“检索工作表提要时出错”);
};
列出工作表=w.getEntries();
WorksheetEntry we=(WorksheetEntry)worksheets.get(wi);
println(“检索到的工作表”+we.getTitle().getPlainText());
//获取列表源URL
试一试{
listFeedUrl=we.getListFeedUrl();//新URL(“http://spreadsheets.google.com/feeds/list/“+k+”/od6/private/full”);
ListFeed lf2=新ListFeed();
f=myService.getFeed(listFeedUrl,lf2.getClass());
}
捕获(例外e){
println(“检索列表提要时出错”);
};
//获取细胞饲料
试一试{
URL cellFeedUrl=we.getCellFeedUrl();//新URL(“http://spreadsheets.google.com/feeds/cells/“+k+”/od6/private/full”);
CellFeed lf2=新的CellFeed();
cf=myService.getFeed(cellFeedUrl,lf2.getClass());
}
捕获(例外e){
println(“检索列表提要时出错”);
};
currentListFeed=f;
currentCellFeed=cf;
currentCells=cf.getEntries();
currentListEntries=f.getEntries();
currentTitle=we.getTitle().getPlainText();
currentTotalRows=currentListEntries.size();
如果(currentListEntries.size()>0){
ListEntry le=(ListEntry)currentListEntries.get(0);
currentTotalCols=le.getCustomElements().getTags().size();
Set tags=le.getCustomElements().getTags();
tagArray=新字符串[tags.size()];
tagArray=tags.toArray(tagArray);
};
返回(f);
};
/*
获取单元格值
返回保存在单个图纸单元格中的值。
*/
字符串getCellValue(int c,int r){
ListEntry le=(ListEntry)currentListEntries.get(r);
Set tags=le.getCustomElements().getTags();
String[]tagArray=新字符串[tags.size()];
tagArray=tags.toArray(tagArray);
返回(le.getCustomElements().getValue(tagArray[c]);
};
字符串getCellValue(字符串标记,int r){
ListEntry le=(ListEntry)currentListEntries.get(r);
返回(le.getCustomElements().getValue(标记));
};
void setCellValue(字符串标记、int r、字符串val){
ListEntry le=(ListEntry)currentListEntries.get(r);
le.getCustomElements().setValueLocal(标记,val);
试一试{
ListEntry updatedRow=le.update();
}
捕获(例外e){
};
};
void setNewCellValue(字符串标记、int r、字符串val){
ListEntry le=新的ListEntry();
试一试{
le.getCustomElements().setValueLocal(标记,val);
ListEntry insertedRow=myService.insert(listFeedUrl,le);
ListEntry updatedRow=insertedRow.update();
}
捕获(例外e){
};
};
};

有什么想法吗?

因为错误消息说你的应用程序无法登录谷歌服务。您需要有一个Google帐户,并在googleUser和googlePass中提供凭据

我刚从blprnt下载了这个示例,输入了我的Google凭据