【Android】Error: Expected resource of type styleable [ResourceType]

本文介绍了一种在Android自定义View中遇到的错误:在使用TypedArray获取资源时出现的Expectedresourceoftypestyleable警告。文章详细解释了错误产生的原因,并提供了一个简单有效的解决方案:通过添加@SuppressWarnings注解来过滤掉此警告,从而确保应用程序能够顺利编译并发布。

错误提示

Error: Expected resource of type styleable [ResourceType]
这个错误在编译运行时候并不会出现,但是当需要编译打包的时候,就会爆出这个异常。

这个错误出现的位置位于自定义View中,代码如下:

TypedArray ta = mContext.obtainStyledAttributes(attrs);
boolean hasBottomLine = ta.getBoolean(0, false);
boolean hasTopLine = ta.getBoolean(1, false);

点击异常信息会定位到第三行,只有当 TypedArray 获取第二个属性以后数据时,才会出现此异常,ta.getBoolean(0, false) 这句则不会报错,其实这应该是一个警告,所以才会在调试的时候正常编译,但却在编译签名包的时候失败。

解决办法

解决办法就是在使用 TypedArray 的方法处,加上 @SuppressWarnings("ResourceType") ,这样即可过滤该警告,可以正常通过签名编译。例如:

@SuppressWarnings("ResourceType")
public void initView() {
    TypedArray ta = mContext.obtainStyledAttributes(attrs);
    boolean hasBottomLine = ta.getBoolean(0, false);
    boolean hasTopLine = ta.getBoolean(1, false);
    ta.recycle();
}

参考链接

http://stackoverflow.com/questions/26360954/obtainstyledattributes-annotated-with-styleableres-suppress-warnings

### C++ 编译错误分析 当遇到 `error: expected type-specifier` 错误时,通常表示编译器无法识别某个标识符作为有效的类型。这种问题可能由多种原因引起,例如缺少必要的头文件、命名冲突或语法错误。 以下是可能导致此错误的原因及其解决方案: #### 1. **未定义的类名** 如果 `FurnitureDetectTask` 是一个自定义类,则需要确保该类已被正确定义并包含在当前源文件中。如果没有正确引入头文件或者类声明缺失,就会引发此类错误。 ```cpp // 假设 FurnitureDetectTask 定义在一个单独的头文件中 #include "FurnitureDetectTask.h" // 确保路径正确[^1] int main() { FurnitureDetectTask task; // 使用前需先定义 return 0; } ``` #### 2. **命名空间问题** 如果 `FurnitureDetectTask` 属于特定的命名空间,则需要显式指定其所属命名空间,或者通过 `using namespace` 来简化调用方式。 ```cpp namespace MyNamespace { class FurnitureDetectTask { /* ... */ }; } int main() { MyNamespace::FurnitureDetectTask task; // 显式指定命名空间[^2] return 0; } ``` #### 3. **拼写错误** 检查是否存在大小写不匹配或其他拼写错误。C++ 对大小写敏感,因此即使只有一个字母不同也会导致编译失败。 #### 4. **依赖关系问题** 某些情况下,`FurnitureDetectTask` 的定义可能依赖其他尚未加载的库或模块。此时应确认所有必需的外部资源均已正确配置。 ```cpp extern "C" { #include <some_external_library.h> // 如果有 C 风格接口[^3] } class FurnitureDetectTask : public SomeBaseClass {}; // 继承自某基类时注意顺序 ``` #### 5. **模板参数遗漏** 如果是模板类实例化过程中出现问题,可能是由于忘记提供具体的模板参数所致。 ```cpp template<typename T> class FurnitureDetectTask {}; int main() { FurnitureDetectTask<int> task; // 提供具体类型参数[^4] return 0; } ``` 以上几种情况涵盖了大部分常见场景下的解决方法。实际操作时可根据具体情况逐一排查直至找到根本原因。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值