我下面有一个哑码;学校有2个静态成员,教师和学生,其列表是从其构造函数中的Web服务调用填充的。
我的问题是“如果Web服务返回的名称真的很慢,GetNamesOfTeachers或GetNamesOfStudents是否有可能返回null?”
谢谢您的帮助。
**FREE
// RFC Main Grid
CTL-OPT NOMAIN OPTION (*SRCSTMT : *NODEBUGIO);
DCL-PROC PUR027 EXPORT;
DCL-PI PUR027 EXTPROC(*DCLCASE);
StartingRow PACKED(3:0);
NbrOfRows PACKED(3:0);
Search CHAR(30);
SQLCODE PACKED(3:0);
RSL CHAR(2);
END-PI;
IF Search = '';
EXEC SQL Declare RSCURSOR cursor for
SELECT *
FROM CDPL03
ORDER BY CDEPT, CDESC
OFFSET (:StartingRow - 1) * :NbrOfRows ROWS
FETCH NEXT :NbrOfRows ROWS ONLY;
EXEC SQL Open RSCURSOR;
EXEC SQL SET RESULT SETS Cursor RSCURSOR;
ELSE;
EXEC SQL Declare RSCURSOR2 cursor for
SELECT *
FROM CDPL03
WHERE CDESC LIKE '%' concat trim(:Search) concat '%' AND
CDEPT LIKE '%' concat trim(:Search) concat '%'
ORDER BY CDESC, CDEPT
OFFSET (:StartingRow - 1) * :NbrOfRows ROWS
FETCH NEXT :NbrOfRows ROWS ONLY;
EXEC SQL Open RSCURSOR2;
EXEC SQL SET RESULT SETS Cursor RSCURSOR2;
ENDIF;
// Validate for SQL errors
IF SQLCODE = 0;
RSL = '00';
ELSEIF SQLCODE > 0;
RSL = '10';
ELSEIF SQLCODE < 0;
RSL = '20';
ENDIF;
//EXEC SQL SELECT COUNT(*)
// INTO :RowCount
// FROM CDPL03;
RETURN;
END-PROC PUR027;
// To create the service program:
// CRTSRVPGM SRVPGM(BPCSO/PUR027WS)
// MODULE(BPCSO/PUR027W)
// SRCFILE(BPCSS/PURBNDF) SRCMBR(PUR027WB)
答案 0 :(得分:0)
假设网络服务器没有超时并且由于您的调用是同步的,那么除非将其编程为返回null,否则这些函数不应返回null。
答案 1 :(得分:0)
这完全取决于GetTeachersFromService()的实现方式。如果该方法如下所示,则GetNamesOfTeachers将返回null。
public List<string> GetTeachersFromService()
{
// Call web service
if (webServiceResponse.teachers.count > 0)
return webServiceResponse.teachers;
else return null;
}
如果上述方法的其他部分包含return List<string>();
,则您不会从GetNamesOfTeachers获得空列表。
答案 2 :(得分:0)
我不知道如何实现GetTeachersFromService()和GetStudentsFromService()的客户端代码(代理)。但是通常即使这些函数被同步调用,您也可以设置超时。如果服务在指定时间内没有响应,您将获得一个异常,可以在代码中处理该异常,例如
setActionBar()