findViewById - 无法解析方法

Posted

技术标签:

【中文标题】findViewById - 无法解析方法【英文标题】:findViewById - Cannot resolve method 【发布时间】:2015-02-26 19:37:23 【问题描述】:

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

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

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

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

这是正确的做法吗?请帮忙。

【问题讨论】:

你的课程扩展了什么? View 和扩展它的类有问题的方法 谢谢,尝试扩展视图... 【参考方案1】:

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

我只是在猜测您写的内容,但您似乎正在尝试访问 Async 类中的 findViewById 方法,由于 findViewById而无法完成> 作为 Activity 类的方法,因此它在 Async 中不存在。

你应该在你的 Activity 上回调你的 UI 线程来更新它。

为此,您应该对 Async 类的 postExecute 方法进行任何更改,记住在 doInBackground 方法中所做的任何事情都是在不同的线程中完成的。只有这样,您才能应用所需的更改。

【讨论】:

问题是,我有一个枚举作为处理结果。这不能从扩展 Async 类的类传递回 Activity。 你能发布一些代码吗?您是否在 Activity 类中声明了 Async 类?您是否尝试在 doInBackground 方法中进行更改?【参考方案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);
上面代码中的

result[0] 将是你的字符串。

对于onPostExecute,您应该在您的doInBackground 中return 一个值:

    @Override
    protected String doInBackground(String... urls) 
    return yourstring 

【讨论】:

我喜欢这个网站,你被否决了,但没人费心解释原因。 如何获取结果枚举到 onPostExecute 或 onProgressUpdate 以填充表?有什么建议吗?

以上是关于findViewById - 无法解析方法的主要内容,如果未能解决你的问题,请参考以下文章

当我在导航抽屉中使用带有发送片段的 EditText 时,无法解析片段中的方法“findViewById”? [复制]

Android Intent 无法解析构造函数

Android studio 无法解析 ActionBarActivity

无法在每个活动上解析符号“R”[重复]

无法解析 android.support.design。迁移到 AndroidX 后

Ubuntu 无法解析域名