我试着打电话View.getMeasuredHeight
和View.getHeight
在onGlobalLayout
.两者都给我相同的结果.
我想知道,在什么情况下他们的价值会有所不同?有没有例子可以证明这一点?
我试着在谷歌搜索.第一个结果似乎与此问题无关:Android:如何获得自定义View的高度和宽度?
我试图解析从REST Web服务返回的一些JSON.get()调用的返回值是TStringStream.我正在使用dbxjson来处理数据.为了便于在此处演示,我创建了一个测试项目,可以在不调用Web服务的情况下重现错误(使用文本文件代替Web服务输出).这是代码:
var SL : TStringStream;
LJsonObj : TJSONObject;
begin
SL := TStringStream.Create;
try
SL.LoadFromFile('output.txt');
LJsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(SL.DataString), 0) as TJSONObject;
finally
SL.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
有时,此JSON数据中的phone_numbers数组为空.在来自Web服务调用的流对象中,它看起来像这样:
{
"Contact Information Service": {
"response": {
"phone_numbers": [
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致ParseJSONValue返回nil值.
但是,如果我在我的测试txt文件中将空phone_numbers数组更改为:
{
"Contact Information Service": {
"response": {
"phone_numbers": []
}
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常(即返回一个TJSONObject).不同之处在于空数组中的空格.由于某种原因,空数组中具有空格的第一个JSON响应导致ParseJSONValue返回nil.它工作正常,方括号之间没有空格.
我的JSON解析出了什么问题?在调用ParseJSONValue之前是否需要进行某种预解析?
我正在使用Delphi XE2和Indy 10.5.8.0.我有一个TIdHttp实例,我需要为请求添加一个自定义标头.标头值中包含逗号,因此它会自动解析为多个标头.我不希望它那样做.我需要我的自定义标头的标头值仍然是一个字符串,而不是基于逗号分隔符拆分.
我试过设置IdHttp1.Request.CustomHeaders.Delimiter := ';'
没有成功.有没有办法确保标题不会分裂?
procedure SendRequest;
const HeaderStr = 'URL-Encoded-API-Key VQ0_RV,ntmcOg/G3oA==,2012-06-13 16:25:19';
begin
IdHttp1.Request.CustomHeaders.AddValue('Authorization', HeaderStr);
IdHttp1.Get(URL);
end;
Run Code Online (Sandbox Code Playgroud) 我使用具有数字元素的Web服务.Delphi wsdl导入器将其设置为Int64.
Web服务允许此元素为空.但是,因为它被定义为Int64,当我在Delphi中使用Web服务而不为其设置值时,它默认为0,因为它是Int64.但是我需要它是空白的并且Web服务不接受值0(0被定义为无效并且由Web服务返回错误).
如果类型是Int64,我如何传递空值?
在尝试合并多个数据帧时,我得到了一些非常奇怪的东西.救命!
我需要通过列'RID'和'VISCODE'合并一堆数据帧.以下是它的外观示例:
d1 = data.frame(ID = sample(9, 1:100), RID = c(2, 5, 7, 9, 12),
VISCODE = rep('bl', 5),
value1 = rep(16, 5))
d2 = data.frame(ID = sample(9, 1:100), RID = c(2, 2, 2, 5, 5, 5, 7, 7, 7),
VISCODE = rep(c('bl', 'm06', 'm12'), 3),
value2 = rep(100, 9))
d3 = data.frame(ID = sample(9, 1:100), RID = c(2, 2, 2, 5, 5, 5, 9,9,9),
VISCODE = rep(c('bl', 'm06', 'm12'), 3),
value3 = rep("a", 9),
values3.5 = rep("c", 9))
d4 …
Run Code Online (Sandbox Code Playgroud) 我有一个用Delphi XE编写的程序,它使用TMediaPlayer播放WAV文件.该程序在Windows 7计算机上的系统托盘中运行.程序等待事件触发播放wav文件.如果我在计算机上登录,那么wav就可以了.但是,如果我锁定计算机终端(或通过远程桌面登录),则wav文件无法通过计算机扬声器播放.我知道事件正在被触发,因为事件处理程序中的所有其他代码都运行正常; 只是你听不到wav文件.我已将音量硬编码到最高级别,因此我知道这不是音量问题.如果当前没有人登录到计算机,Windows 7是否有阻止声音通过扬声器的东西?如果存在这种限制,是否有办法绕过它?
我有一个使用以Cold Fusion编写的Web服务的Delphi XE应用程序(我无法控制该服务的输出格式)。我在Delphi中使用WSDL Importer创建了用于调用Web服务的单元。我在Delphi中遇到一个异常,说“元素“数据”不包含单个文本节点”。
当我得到异常时,从Web服务返回的XML的相关部分是这样的:
<data soapenc:arrayType="xsd:anyType[][1]" xsi:type="soapenc:Array">
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">6490</data>
<data xsi:type="soapenc:string">Other Expense</data>
</data>
</data>
Run Code Online (Sandbox Code Playgroud)
如果来自Web服务的XML包含多个<data>
子级,则不会发生异常。
<data soapenc:arrayType="xsd:anyType[][3]" xsi:type="soapenc:Array">
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">2600</data>
<data xsi:type="soapenc:string">Deferred Revenue</data>
</data>
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">4120</data>
<data xsi:type="soapenc:string">Non-Credit Income</data>
</data>
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">6490</data>
<data xsi:type="soapenc:string">Other Expense</data>
</data>
</data>
Run Code Online (Sandbox Code Playgroud)
是什么导致此异常,并且有解决该异常的方法而又不能更改Web服务本身?
我已经在表单上添加了组件提示.当组件获得焦点时,我想设置标签组件的标题以显示提示.
我添加了一个TApplicationEvents对象并将OnShowHint事件设置为
procedure TImportFrm.ApplicationEvents1ShowHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
HelpLbl.Caption := HintStr;
end;
Run Code Online (Sandbox Code Playgroud)
但是,似乎ShowHint事件仅在鼠标移动时触发.有没有办法在组件获得焦点时触发提示代码,而不必为表单上的每个组件实现OnEnter事件?
我目前正在使用Tableau Python API生成.tde.应该每天使用新数据生成此.tde,但截至目前,我无法通过Tableau Desktop找到发布到Tableau Public的方法.
有没有办法在不通过桌面客户端的情况下发布到Tableau Public?也许通过欺骗POST,通过使用tabcmd.exe或其他东西?
这个帖子在同一行上提出了一些问题,但遇到了一个特定于Tableau Server的答案,这是一个我无法访问的单独产品.
我正在使用一个包含 60 多个表的数据库,我正在尝试编写一个 python 函数,该函数接受您希望使用的表,并输出您应该用来连接这些表的连接语句。我已将所有 60 个表放入一个有序字典中,如下所示,其中列出了每个表中的表名称、主键和外键。
OrderedDict({
'table1_name':{'pk':'id', 'fk':{'table2_name':'table2_id', 'table3_name':'table3_id'}}
'table2_name':{'pk':'id'},
'table3_name':{'pk':'id', 'fk':{'table1_name':'table1_id'}
}) #Etc...
Run Code Online (Sandbox Code Playgroud)
我开始编写一个函数,但收效甚微,因为外键相互交织,使得从一个表遍历到另一个表并找到最短路径变得非常复杂。我尝试编写一个函数来执行此操作,如下所示:
def join_creator(main_table, *tables):
#Test if we can join other tables directly to main
try:
main_table
main_pk = table_dict[main_table]["pk"]
except:
print('No primary key, this cannot be your main table')
return
result = f'FROM "public"."{main_table}" \n'
for table in other_tables:
try:
fk = table_dict[table]['fk'][main_table]
result += f'LEFT JOIN "public"."{table}" ON {main_table}.{main_pk}={table}.{fk}\n'
except KeyError:
pass
print(result)
Run Code Online (Sandbox Code Playgroud)
总而言之,该函数的输入类似于
join_creator('table_1', 'table_2', 'table_3')
输出将是一个像这样的字符串:
FROM table_1
LEFT JOIN table_2 …
Run Code Online (Sandbox Code Playgroud)