findViewById - 无法解析方法

时间:2015-02-26 19:37:24

标签: android view android-asynctask

我是Android编程新手。这是我的第一个应用程序。我试图了解使用异步任务的最佳实践或方法。

场景 - 我需要通过HTTP获取数据并将其显示在应用主屏幕上。

主类 - 在屏幕上绘制一些基本内容并调用Async类。 异步类 - 从strings.xml获取数据,通过http发送数据,检索内容并将处理后的内容存储为Enum。 Ñ

我的问题 - 现在当我尝试从Async类方法中的activity.xml获取表时,它说无法解析方法findViewById。

这是正确的方法吗?请帮助。

2 个答案:

答案 0 :(得分:0)

您应该发布Activity和Async类中的代码,这将有助于我们更快地找到解决问题的方法。

我只是在猜测你写的是什么,但似乎你正在尝试访问Async类中的 findViewById 方法,由于而无法完成findViewById 是Activity类中的一个方法,因此它不存在于Async中。

您应该回调活动上的UI线程来更新它。

要执行此操作,您应该对Async类的postExecute方法进行任何更改,请记住在doInBackground方法中完成的任何操作都是在另一个线程中完成的。只有这样才能应用所需的更改。

答案 1 :(得分:-2)

您无法在后台运行UI操作。您应该在onPreExecuteonPostExecuteonProgressUpdate中运行它们,就像这样。

    @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 }