我是Android编程新手。这是我的第一个应用程序。我试图了解使用异步任务的最佳实践或方法。
场景 - 我需要通过HTTP获取数据并将其显示在应用主屏幕上。
主类 - 在屏幕上绘制一些基本内容并调用Async类。 异步类 - 从strings.xml获取数据,通过http发送数据,检索内容并将处理后的内容存储为Enum。 Ñ
我的问题 - 现在当我尝试从Async类方法中的activity.xml获取表时,它说无法解析方法findViewById。
这是正确的方法吗?请帮助。
答案 0 :(得分:0)
您应该发布Activity和Async类中的代码,这将有助于我们更快地找到解决问题的方法。
我只是在猜测你写的是什么,但似乎你正在尝试访问Async类中的 findViewById 方法,由于而无法完成findViewById 是Activity类中的一个方法,因此它不存在于Async中。
您应该回调活动上的UI线程来更新它。
要执行此操作,您应该对Async类的postExecute
方法进行任何更改,请记住在doInBackground
方法中完成的任何操作都是在另一个线程中完成的。只有这样才能应用所需的更改。
答案 1 :(得分:-2)
您无法在后台运行UI操作。您应该在onPreExecute
,onPostExecute
或onProgressUpdate
中运行它们,就像这样。
@Override
protected void onProgressUpdate (String... result)
{
((TextView) findViewById(R.id.textViewRSSI2)).setText(result[0]);
}
更新:在您的AsyncTask
中设置了三种类型:
private class DownloadWebpageTask extends AsyncTask<String, String, String> {
第一个是执行时传递给AsyncTask的内容,第二个是进度单位,第三个是结果单位。
发布进度时,您可以在doInBackground()
:
publishProgress(yourstring);
上面代码中的结果[0]将是你的字符串。
并且对于onPostExecute
,您应该在您的doInBackground中return
一个值:
@Override
protected String doInBackground(String... urls) {
return yourstring }