活动和线程处理

时间:2011-09-30 13:18:31

标签: android progressdialog ksoap2

我希望在此期间在onCreate()中发出http请求(我使用kso​​ap2),我希望屏幕上有ProgressDialog来阻止用户。请求完成后,我想使用从http请求中检索的元素完成onCreate。

目前:

我有一个实现Runnable的类。我在onCreate中实例化它。此类发出http请求,在此期间,屏幕上会出现ProgressDialog。一旦完成,ProgressDialog就会被解雇。但由于它不在UI线程中,因此在获取http请求的结果之前执行onCreate的以下内容。

我首先尝试过:在onCreate中我执行了我的ProgressDialog的show()然后是http请求,然后是dismiss() ProgressDialog,最后用我的http请求的结果完成了我的onCreate。除了ProgressDialog没有显示这个时间外,没关系。

对于凌乱的解释感到抱歉,我的英语也没有帮助。

无论如何,想法?

感谢。

PS:BTW我知道AsyncTask更好,这是我通常使用的,但使用ProgressDialog并不容易。

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

一个丑陋的方式是onCreate中的一个循环,睡眠等待检索的值......这真的很难看。

2 个答案:

答案 0 :(得分:1)

编辑:我知道你提到你不想使用AsyncTask,因为显示ProgressDialog的复杂性,但除非我遗漏了一些内容,否则应该像下面这样简单。或者,您可以使用处理程序来触发回调吗?

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

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

AsyncTask

编辑:我认为您要问的是 // 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); (从UI线程运行),您想要显示onCreate并在同一方法中返回HTTP请求中的值和一次它完成后,隐藏对话框。

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

如果你从ProgressDialog方法调用HTTP请求,你必须在一个单独的线程中运行它(或者像你一样,实现onCreate)和一个处理器,它将调用你的runnable然后可以处理返回值。

简单地说,你不能:

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

答案 1 :(得分:1)

oncreate节目dialog first中,然后创建一个thread,然后在那里http task进行操作,完成该调用后,handler即可线程和dismiss对话框。