gpt4 book ai didi

android - Activity 和线程处理

转载 作者:行者123 更新时间:2023-11-29 22:19:32 25 4
gpt4 key购买 nike

在此期间,我想在 onCreate() 中发出一个 http 请求(我使用 ksoap2),我想在屏幕上显示一个 ProgressDialog 来阻止用户。请求完成后,我想使用从 HTTP 请求中检索到的元素完成我的 onCreate。

现在:

我有一个实现 Runnable 的类。我在我的 onCreate 中实例化它。此类发出 http 请求,此时屏幕上显示 ProgressDialog。一旦完成,ProgressDialog 将被关闭。但由于它不在 UI 线程中,因此在获取 http 请求的结果之前执行以下 onCreate。

起初我也尝试过:在 onCreate 中,我对我的 ProgressDialog 执行了一个 show() 然后是 http 请求,然后是一个 dismiss() ProgressDialog 最后完成了我的onCreate 与我的 http 请求的结果......没关系,除了 ProgressDialog 这次没有显示。

抱歉,我的解释很乱,我的英语也帮不上什么忙。

无论如何,想法?

谢谢。

PS:顺便说一句,我知道 AsyncTask 更好,这是我经常使用的,但将它与 ProgressDialog 一起使用一点也不容易。

我的问题更多:onCreate() 中是否有方法发出 http 请求以获取 int 的值。发出此请求时:显示 ProgressDialog 以阻止用户,但也阻止 UI 线程,以便 onCreate 的结尾可以在 http 请求完成后使用检索到的值。

一种丑陋的方式是在 onCreate 中循环并等待检索值...这真的很丑陋。

最佳答案

编辑:我知道你提到过你不想使用 AsyncTask,因为显示 ProgressDialog 很复杂,但除非我遗漏了什么,否则它应该是就像下面一样简单。或者,您可以使用处理程序来触发回调?

我认为您需要某种处理程序来在 HTTP 请求完成后进行回调,然后在回调中完成您的代码。

我还使用 ksoap2 进行 Web 服务调用,并在调用时显示 ProgressDialog。 Web 服务器调用完成后,它会引发一个事件,然后我关闭 ProgressDialog。我不确定这是否对你有帮助,但我有以下方法(当然,可能有更好的方法,但这对我有用),这样在 UI 线程上调用 ProgressDialogAsyncTask 完成并调用 complete 方法(将线程返回给 UI),我关闭对话框:

    // Notify user the web service is connecting
final ProgressDialog dialog = ProgressDialog.show(
Screen_GlobalLeaderboard.this, "Getting scores",
"Please wait...", true);
dialog.setCancelable(true);

WebService ws = new WebService(this) {

@Override
public void webServiceCallComplete(boolean success, Object data,
String errorMessage, WebMethods callingWebMethod) {


dialog.dismiss();

// Your complete code here
}
};

ws.getTopLeaderboardResults(top, gameMode);

编辑:我想你问的是 onCreate(从 UI 线程运行),你想显示一个 ProgressDialog 并在同一个方法中返回一个值来自 HTTP 请求,一旦完成,隐藏对话框。

然后您说您已经尝试过了,但是 ProgressDialog 没有显示。这是因为您使用 HTTP 请求阻塞了 UI 线程。

假设您从 onCreate 方法调用 HTTP 请求,您必须在单独的线程中运行它(或者像您一样,实现 Runnable)和一个处理程序,它将调用 runnable,然后您可以使用它来处理返回值。

简而言之,您不能:

显示 ProgressDialog > 调用 HTTP 请求 > 获取值 > 隐藏 ProgressDialog 而不为 HTTP 请求添加另一个线程(或者 ProgressDialog 不会show) 这反过来意味着您返回的 HTTP 请求代码必须在调用 onCreate 方法之外。

关于android - Activity 和线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7610945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com