Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试运行Sheet.getData()并获取NPE_Java_Nullpointerexception - Fatal编程技术网

Java 正在尝试运行Sheet.getData()并获取NPE

Java 正在尝试运行Sheet.getData()并获取NPE,java,nullpointerexception,Java,Nullpointerexception,我正在尝试运行方法Sheet.getData(),并得到一个NPE。从Javadocs中可以得到,我需要请求一个数据范围才能不获取空值,但我无法获得关于如何请求数据范围的任何信息 Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build()

我正在尝试运行方法
Sheet.getData()
,并得到一个NPE。从Javadocs中可以得到,我需要请求一个数据范围才能不获取空值,但我无法获得关于如何请求数据范围的任何信息

Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
        .setApplicationName(APPLICATION_NAME)
        .build();
ValueRange response = service.spreadsheets().values().get(spreadsheetId, range).execute();

Spreadsheet spreadsheet = service.spreadsheets().get(spreadsheetId).execute();
List<Sheet> sheets = spreadsheet.getSheets();
Sheet sheet = null;
for(Sheet s : sheets)
    if(s.getProperties().getTitle().equalsIgnoreCase("GSheets API Sheet"))
        sheet = s;

List<GridData> data = sheet.getData();
//System.out.println(data.size());
Sheets service=new Sheets.Builder(HTTP_传输、JSON_工厂、getCredentials(HTTP_传输))
.setApplicationName(应用程序名称)
.build();
ValueRange响应=service.spreadsheets().values().get(spreadsheetId,range.execute();
电子表格=service.spreadsheets().get(spreadsheetId.execute();
列表工作表=电子表格.getSheets();
Sheet=null;
用于(图纸s:图纸)
if(s.getProperties().getTitle().equalsIgnoreCase(“GSheets API表”))
薄板=s;
List data=sheet.getData();
//System.out.println(data.size());

我这样做是因为我需要得到一个单元格的背景颜色,所以如果有人能以不同的方式帮助我这样做,我愿意接受其他方法。

我猜当它没有被注释时,会在注释行抛出异常

这意味着
data
对象为null,这意味着sheet.getData()返回null。所以我猜你用来创建电子表格的信息肯定有问题。选项有多种。您应该检查获取凭据的方式以及电子表格ID的值。

s.getProperties().getTitle().equalsIgnoreCase(“GSheets API Sheet”)
的计算结果永远不会为
true
,因此
Sheet
永远不会设置为非空值

换句话说,您的工作簿没有名为“GSheets API sheet”的工作表


在尝试调用对象上的方法之前,请始终检查以确保对象不是
null

那是Google Sheets吗?你能复制stacktrace吗?
线程“main”java.lang.NullPointerException在SheetsQuickstart.main(SheetsQuickstart.java:83)
第83行是当我试图获取
数据的大小时,但是
数据
为空。我看不到试图获取代码中数据大小的行。可以在第83行添加//注释吗?因此,在获取数据之前,我需要执行setRowGroups()。不可以,在调用方法时,需要确保
sheet
不为null。禁止对空对象调用方法。因此,您可以在对对象调用方法之前测试空值:
如果(t!=null){t.doSomething();}
或者事先确保对象不为空值,这在您的示例中是没有的。在for循环结束时,您可以“确保工作表不为null。如果某个方法为null,我不会阻止它运行,我会首先阻止它为null。我仍然不知道您在哪一行得到异常,但假设它在
工作表上。setRowGroups()
,这意味着您的循环不正确,因为在循环结束时,sheet似乎仍然为null。
sheet.setRowGroups()
是一个错误,我忘了删除它。很抱歉上面的源代码就是我的代码。包括发生错误的那一行(事后看来,我最初可能应该包括在内)。我已经排除了这种可能性。我运行了多个测试来查看for循环之后的工作表是否为null,事实并非如此,我确实有一个名为null的工作表。据我所知,
Sheet.getData()
如果我不指定一个范围,就可以返回空值,如果不显式地获取值,我不知道该怎么做。我很清楚什么是NullPointerException,但我想知道是否有人能告诉我如何首先防止
Sheet.getData()
返回空值,因为
工作表
不为空。