`

android 错误解决方法 ---积累中

 
阅读更多

1 在android编程中出现cannot be resolved or is not a field

1.1 问题描述

在自定义属性时,在自定义View中获取属性时,下语句R下面是红色的波浪线,

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomGifView);

 

且总是提示:

cannot be resolved or is not a field

 

1.2 解决办法

看了好久都没头绪,看网上一兄弟提供如下解决方法,特总结记录一下,希望下次遇见能顺利解决:

去除代码activity代码页面顶部中的 import android.R;这句
就可以消除红色波浪线的main cannot be resolved or is not a field类似这个错误了

 

2 自定义属性编译时(xml),提示“error: No resource identifier found for attribute 'xxxxt' in package”(SDK为4.2.2)

2.1 问题描述

为了显示动态的gif动画,继承View自己定义控件,自定义属性gif关联gif资源,但是在布局xml里面使用自定义属性时,提示:

error: No resource identifier found for attribute 'gif' in package 'com.example.androidtest.viewunit'

  

2.2 解决方法一

网上有人说,在使用自定义属性时,可以把自定义空间名称的冒号去掉,例如:

 

自定义属性(attrs.xml):

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="CustomGifView">
        <attr name="gif" format="reference" />
    </declare-styleable>

</resources>

 

布局文件中的使用:

<!--xmlns:customgifview 为自定义属性空间 -->
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:customgifview="http://schemas.android.com/apk/res/com.example.androidtest.viewunit"  
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <TextView  
        android:id="@+id/tvInfo"
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/gif_movie_info"/>
    
    <!--customgifview:gif 使用自定义的属性 -->
    <com.example.androidtest.CustomGifView
        android:id="@+id/ctGifView"
        android:layout_width="100px"
        android:layout_height="120px" 
        android:layout_gravity="center_horizontal"
        android:layout_below="@id/tvInfo"
        customgifview:gif="@drawable/black_dance"/>
    

</RelativeLayout >

 

根据网友的提示,去掉引用自定义属性的冒号后,上述编译错误可以消除:

customgifview:gif="@drawable/black_dance"
==》改为:
customgifviewgif="@drawable/black_dance"/

 

但是,运行时,发现自定义的gif图片并没有显示。 

 

发现自定义控件在构造函数中,不能获取自定义属性的srcId (为0),所以才加载不了gif,

下面是自定义View类的构造函数:

   

/*
我这里是继承View自定义一gifView用于显示gif动画
*/
public CustomGifView(Context context, AttributeSet attrs)
{
    super(context, attrs);

    // 获取控件属性		
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomGifView); 

    // 获取自定义属性
    int srcId = a.getResourceId(R.styleable.CustomGifView_gif, 0);
    Log.d(TAG, "srcId = " + srcId);
		
    if (srcId > 0) {
        // 解码gif
        mMovie = Movie.decodeStream(getResources().openRawResource(srcId));
    }
		
    // 回收资源
   a.recycle();

}

 

 且,启动时,Logcat输出如下错误(应用程序不会崩掉):

07-18 06:46:11.661: E/AndroidRuntime(3549): FATAL EXCEPTION: main
07-18 06:46:11.661: E/AndroidRuntime(3549): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.LoadedApk.makeApplication(LoadedApk.java:504)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4364)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.ActivityThread.access$1300(ActivityThread.java:141)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.os.Looper.loop(Looper.java:137)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at java.lang.reflect.Method.invoke(Method.java:511)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at dalvik.system.NativeStart.main(Native Method)
07-18 06:46:11.661: E/AndroidRuntime(3549): Caused by: java.lang.NullPointerException
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:379)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.LoadedApk.getClassLoader(LoadedApk.java:322)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	at android.app.LoadedApk.makeApplication(LoadedApk.java:496)
07-18 06:46:11.661: E/AndroidRuntime(3549): 	... 11 more

 

猜测有可能与自定义控件的路径有关系,尝试将自定义控件放在Menifest中package标签指定的路径下:

 

package="com.example.androidtest"

 

 同时,修改自定义属性空间路径:

<!-- 属性空间 -->
xmlns:customgifview="http://schemas.android.com/apk/res/com.example.androidtest"

<!-- 属性的使用 -->
customgifview:gif="@drawable/black_dance"

 

clean后,重新编译运行,上面的异常信息没了,gif也能正常播放了~~

但是, 为什么这样修改的原因不明,只是瞎猫碰个死耗子,有知道的兄弟跟俺说下哈,先谢过了~

 

2.3 解决方法二

升级ADT。

具体内容如下:

使用控件的自定义属性,使用时填写命名空间。 

我按照老样子:http://schemas.android.com/apk/控件地址  

在编译的时候报错error: No resource identifier found for attribute 'xxxxt' in package

 

解决:代码看了n遍也没找出问题,最后一个老外回答对了问题。ADT升级以后,自定义控件的命名空间的路径访问给优化了改成

http://schemas.android.com/apk/res-auto  这样填充之后ADT会自动去相应的包路径下寻找

 

参考网址:

http://blog.csdn.net/qeqeqe236/article/details/8919597

 

这个是从网上找到的,没有具体实践,由于更换adt可能会引起其他问题, 考虑项目开发进度环境暂时不敢动了,有条件的可以尝试下。

 

下图是我工程的文件结构:

 

 

 

 

 

 

  • 大小: 83.6 KB
分享到:
评论

相关推荐

    Android开发经验谈-很少有人会告诉你的Android开发基本常识 - 简书1

    【Android开发基本常识】 在Android开发中,掌握一些基本常识是至关重要的,这些常识包括了软件开发流程、问题解决技巧以及开发工具的...在实践中不断积累经验,持续学习新技术,是成为一名优秀Android工程师的关键。

    adb错误解决方法

    本篇文章将详细探讨adb错误的常见类型以及解决方法。 首先,最常见的adb错误是“设备未找到”。这可能是因为驱动程序问题,我们需要确保安装了正确的USB驱动。对于不同型号的Android设备,可能需要下载并安装特定的...

    Android Fragment错误使用的Demo

    在给定的"Android Fragment错误使用的Demo"中,开发者可能遇到的问题可能是以下几种情况: 1. **在onCreate()中多次添加Fragment**:这会导致每次Activity重建时,Fragment被重复添加,从而积累多个实例。 2. **...

    Android应用源码之PlanGame-IT计算机-毕业设计.zip

    尤其是对于计算机科学与技术专业的学生,进行Android应用的毕业设计是提升技能、积累经验的重要途径。本篇文章将深入探讨名为"PlanGame"的Android应用源码,旨在帮助读者理解Android应用的开发流程,掌握关键技术和...

    Android 解决方案 使用指南_android_

    在Android开发过程中,掌握有效的解决方案和使用技巧是至关重要的。本文将深入探讨Android解决方案的关键方面,包括功能的实现、调试...在实践中不断学习和积累,将有助于解决各种复杂问题,打造高质量的Android应用。

    Android 英语朗读器源码-IT计算机-毕业设计.zip

    这部分内容将有助于读者理解项目的全貌,以及开发者在实现过程中所积累的经验和技术难点。 总的来说,这个《Android英语朗读器源码》项目是一次综合性的学习实践,涵盖了Android开发的基本技能和高级特性。通过分析...

    Android-kaifa.rar_android

    首先,让我们解决“Android应用开发入门五问”。这五个问题可能包括: 1. **Android开发环境如何配置?**在开始Android应用开发之前,你需要安装Android Studio,这是官方推荐的集成开发环境(IDE)。它包含了Java ...

    android studio搭建Cordova环境

    以下是一个详细的步骤指南,涵盖了如何在Android Studio中配置Cordova环境以及可能遇到的问题及其解决方案。 首先,确保你已经安装了以下基础软件: 1. Java Development Kit (JDK):Cordova和Android Studio都需要...

    android开发入门.docxandroid开发入门.docxandroid开发入门.docx

    为了成为一名合格的Android开发者,不仅需要掌握基本的语言和框架知识,还需要持续关注行业动态,参与社区活动,积累实践经验。通过不断的实践和学习,逐步提升自己的技术水平,最终能够开发出高质量的应用程序。

    Android-Speedup是一款针对于多组件构建加速的插件

    总结,Android-Speedup插件是解决大型Android项目构建速度慢问题的有效工具,它通过各种手段优化了构建过程,使得组件化开发的效率得到显著提升。开发者可以根据自身项目特点,结合插件提供的配置选项,进行定制化的...

    Android任务驱动式教程.pdf

    通过这样一系列由浅入深的任务设置,学习者不仅能快速上手Android开发,还能在此过程中培养解决问题的能力和独立思考的习惯。 综上所述,《Android任务驱动式教程》为初学者提供了一个结构化且富有成效的学习路径。...

    Android应用源码之Android应用源码安卓与PC的Socket通信项目java版-IT计算机-毕业设计.zip

    通过这个项目,学习者可以深入掌握Android应用的网络编程,提高解决问题的能力,并为未来的工作积累宝贵经验。同时,这个源码也适合作为论文研究的基础,探讨移动应用与PC间数据交互的实现方式和技术挑战。

    android4.4编译环境下载

    ### Android 4.4 编译环境下载及配置详解 ...虽然当前Android版本已经更新到了更高的版本,但了解旧版本的编译环境设置仍然是很有价值的经验积累。希望本文能帮助到正在学习Android开发的朋友们!

    android内存泄露测试

    最后,持续学习和实践是提高内存管理技能的关键,建议开发者定期参加培训、阅读专业文献,并在实际项目中不断积累经验。例如,参考文章《Android在测试中的应用》(...

    阿里巴巴android和java开发文档

    阿里巴巴作为中国领先的科技巨头,其在Android和Java开发领域积累了丰富的经验和最佳实践。这份文档集合了阿里巴巴对于这两种技术的专业见解,旨在帮助开发者提升代码质量、优化性能并遵循良好的编程规范。以下将对...

    Android 小积累之AsyncQueryHandler用法

    `AsyncQueryHandler`是Android系统提供的一种用于在后台线程执行SQLite数据库查询的工具类,它可以避免因为长时间数据库操作导致的ANR(Application Not Responding)错误。下面我们将深入探讨`AsyncQueryHandler`的...

    精通Android开发之界面速成

    在Android开发中,界面设计是至关重要的,因为它直接影响到用户的体验和应用的吸引力。...然而,这并不意味着只需两个小时就能完全精通,真正的精通需要在实践中不断积累经验,理解和掌握Android系统的深层机制。

Global site tag (gtag.js) - Google Analytics