构建离线应用
为了将重点放在应用开发的脱机方面,本主题演示了一个围绕 Twitter 的简单方案。你将构建一个应用,使你能够在离线状态下阅读 Twitter 帖子和提交推文。当应用联机时,应用会发布推文并重新加载本地数据。
在较高级别上,应用执行以下任务:
- 当用户打开应用时:
- 如果设备处于联机状态,应用将通过 Twitter 连接器提取数据,并使用该数据填充集合。
- 如果设备处于脱机状态,应用将使用 LoadData 函数从本地缓存文件加载数据。
- 用户可以提交推文。如果应用程序处于联机状态,它会将推文直接发布到 Twitter 并刷新本地缓存。
- 应用联机时每五分钟一次:
- 应用会在本地缓存中发布任何推文。
- 应用将刷新本地缓存,并使用 SaveData 函数进行保存。
第 1 步:将 Twitter 添加到空白手机应用
- 创建具有"手机"布局的空白画布应用。
- 在"视图"选项卡上,选择"数据源"。
- 在"数据"窗格中,选择"添加数据源"。
- 选择"新建连接"> Twitter >创建"。
- 输入凭据,创建连接,然后关闭"数据"窗格。
第 2 步:收集现有推文
- 在树视图窗格中,选择"应用",然后将其 OnStart 属性设置为以下公式:
If( Connection.Connected,
ClearCollect( LocalTweets, Twitter.SearchTweet( "PowerApps", {maxResults: 10} ) );
Set( statusText, "Online data" ),
LoadData( LocalTweets, "LocalTweets", true );
Set( statusText, "Local data" )
);
SaveData( LocalTweets, "LocalTweets" );
- 在"树视图"窗格中,选择 App 对象的省略号菜单,然后选择"在启动时运行"以运行该公式。
注意
LoadData 和 SaveData 函数可能会在 Power Apps Studio 中显示错误,因为浏览器不支持它们。但是,在将此应用部署到设备后,它们将正常运行。
此公式检查设备是否联机:
- 如果设备处于联机状态,则该公式会将最多 10 条带有搜索词"PowerApps"的推文加载到 LocalTweets 集合中。
- 如果设备处于脱机状态,则公式将从名为"LocalTweets"的文件(如果可用)加载本地缓存。
第 3 步:在图库中显示推文
- 在"插入"选项卡上,选择"库">"空白挠性高度"。
- 将库控件的 Items 属性设置为 。LocalTweets
- 在库模板中,添加三个 Label 控件,并将每个标签的 Text 属性设置为以下值之一:
- ThisItem.UserDetails.FullName & " (@" & ThisItem.UserDetails.UserName & ")"
- Text(DateTimeValue(ThisItem.CreatedAtIso), DateTimeFormat.ShortDateTime)
- ThisItem.TweetText
- 使最后一个标签中的文本加粗,以便库类似于此示例。
步骤 4:显示连接状态
- 在库下,插入一个标签,然后将其 Color 属性设置为红色。
- 将最新标签的 Text 属性设置为以下公式:If( Connection.Connected, "Connected", "Offline" )
此公式确定设备是否联机。如果是,标签将显示"已连接";否则,将显示"脱机"。
第 5 步:添加用于撰写推文的框
- 在连接状态标签下,插入一个 Text 输入控件,并将其重命名为 NewTweetTextInput。
- 将文本输入框的"默认"属性设置为 。""
步骤 6:添加用于发布推文的按钮
- 在文本输入框下,添加一个 Button 控件,并将其 Text 属性设置为以下值:"Tweet"
- 将按钮的 OnSelect 属性设置为以下公式:
If( Connection.Connected,
Twitter.Tweet( "", {tweetText: NewTweetTextInput.Text} ),
Collect( LocalTweetsToPost, {tweetText: NewTweetTextInput.Text} );
SaveData( LocalTweetsToPost, "LocalTweetsToPost" )
);
Reset( NewTweetTextInput );- 在应用的 OnStart 属性中,在公式的末尾添加一行:
If( Connection.Connected,
ClearCollect( LocalTweets, Twitter.SearchTweet( "PowerApps", {maxResults: 100} ) );
Set( statusText, "Online data" ),
LoadData( LocalTweets, "LocalTweets", true );
Set( statusText, "Local data" )
);
SaveData( LocalTweets, "LocalTweets" );
LoadData( LocalTweetsToPost, "LocalTweetsToPost", true ); // added line
以下公式确定设备是否处于联机状态:
- 如果设备处于联机状态,它会立即发布推文。
- 如果设备处于脱机状态,它将捕获 LocalTweetsToPost 集合中的推文并将其保存到设备。
然后,公式重置文本输入框中的文本。
第 7 步:检查新推文
- 在按钮的右侧,添加一个 Timer 控件。
- 将计时器的"持续时间"属性设置为 300000。
- 将计时器的"自动启动"和"重复"属性设置为 true。
- 将计时器的 OnTimerEnd 设置为以下公式:
If( Connection.Connected,
ForAll( LocalTweetsToPost, Twitter.Tweet( "", {tweetText: tweetText} ) );
Clear( LocalTweetsToPost );
ClearCollect( LocalTweets, Twitter.SearchTweet( "PowerApps", {maxResults: 10} ) );
SaveData( LocalTweets, "LocalTweets" );
)此公式确定设备是否联机。如果是,应用将发布 LocalTweetsToPost 集合中的所有项目,然后清除该集合。
















