2011-03-28 102 views
0

嘿,我有一个应用程序使用defaulthttpclient登录到几个网站,我发现我需要使用AsyncTask作为请求阻塞UI线程。在我的代码中,我创建了一个状态类的实例,即State state = new O2State();与不同的网站不同的状态。需要帮助AsyncTasks - Android应用程序

然后我调用state.logon(String username,String password);返回包含结果这样的细节的字符串:

String result = state.logon(username, password); 

我一直在试图实现asynctasks运行在另一个线程此代码,返回字符串回到UI线程上完成。这个想法是我会显示一个进度对话框,运行线程,并在完成后,会显示一个对话框的结果。

我一直在找这个例子:

public void onClick(View v) { 
new DownloadImageTask().execute("http://example.com/image.png"); 
} 

private class DownloadImageTask extends AsyncTask { 
    protected Bitmap doInBackground(String... urls) { 
     return loadImageFromNetwork(urls[0]); 
    } 

    protected void onPostExecute(Bitmap result) { 
     mImageView.setImageBitmap(result); 
    } 
} 

如果我坚持的是: 我不认为我需要任何参数,但是doinbackground似乎需要的参数列表。我也不熟悉这个方法参数声明的时间。

其次: 我不知道如何在线程完成执行时返回结果字符串。我应该创建一个“DoThisWhenTheThreadIsFinished(String result)”并从onPostExecute调用它吗?

无论如何,我希望这不是太混乱阅读,我非常感谢您可以提供任何帮助。 谢谢

回答

1

如果您不需要参数只需指定类型(例如字符串)并忽略它,或者您可以使用Void类(注意大写字母V)。

对于如何将控制返回到UI线程以反映更新的建议是一个好方法。即在onPostExecute()中调用活动的方法来更新UI。

作为一般规则,如果任何操作需要超过几百毫秒,请使用单独的线程。您可能还想使用旋转进度指示器来显示应用程序正在执行某些操作。

(当人们回答你的问题时,总是对你喜欢的问题进行评分,然后选择一个作为“最佳”答案。

+0

@Oille C嘿非常感谢,我实际上对参数进行了很多排序,但仍然想知道如何将结果发送回UI线程,因此很好的了解我的想法是有道理的:-)我有任务启动和解散进度对话框,其工作正常。我只是不确定如何引用当前活动的方法。我将活动的引用传递给任务构造函数,但“activity.displayLoginResults();”但我得到“未定义的类型活动错误”。有什么建议么? – 2011-03-28 18:05:41

+0

@Oille C干杯,实际上,问题是我把这个血腥的方法设置为私人哈哈。是作为一个独立的类与活动正在通过作为参考。 CHeersw的建议! – 2011-03-29 12:15:06