赞
踩
本篇记录一下使用android-support-v7-appcompat.jar包时,遇到的各种异常问题。
异常包括:
java.lang.NoClassDefFoundError: android.support.v7.app.AppCompatDelegateImplV14;
NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable;
IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity。
转载请注明出处:http://blog.csdn.net/adayabetter/article
欢迎交流讨论。
因为自定义Activity继承了android.support.v7.app.AppCompatActivity,在OnCreate方法中调用
super.onCreate(savedInstanceState)出现了该异常。经过查找资料分析,是android-support-v7-appcompat.jar包版本问题导致。开始各种搜索support-v7 jar包。更换jar包后,又出现了新的异常。
public class NiceDialogActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nicedialog);
}
异常信息如下:NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable
E/AndroidRuntime(26374): java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable;
09-07 09:23:18.084: E/AndroidRuntime(26374): at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:336)
09-07 09:23:18.084: E/AndroidRuntime(26374): at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309)
09-07 09:23:18.084: E/AndroidRuntime(26374): at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273)
09-07 09:23:18.084: E/AndroidRuntime(26374): at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
09-07 09:23:18.084: E/AndroidRuntime(26374): at com.example.niceDialog.NiceDialogActivity.onCreate(NiceDialogActivity.java:18)
分析该异常的内容:
如下图是AppCompatDelegateImplV7中createSubDecor()的代码
从异常内容可以看出,该处未识别android.support.v7.appcompat.R.styleable。
作为单独的Jar包,android-support-v7-appcompat.jar内并无R文件。由此想到了,需要把android-support-v7-appcompat.jar包作为Library引入到项目中。
解决方法:
1. 把android-support-v7-appcompat工程导入Eclipse,选择项目->右键Properties->Android->Is Library打上对勾。
2. 在自己的工程中,点击右键,选择Properties,选Android,在Library中点击“Add”,添加android-support-v7-appcompat作为Library。
如下图
此时项目的gen目录就出现了android.support.v7.appcompat.R.styleable。
如下图:
再次运行,NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable异常以及不出现了。
但是有了新的异常,继续往下看。
解决了前面提到的2个异常后,本以为一切都恢复了正常,终于可以喘口气了,可是看到的还是闪退。
继续分析异常日志:IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
09-07 10:05:53.504 E/AndroidRuntime(18996): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.niceDialog.NiceDialogActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
09-07 10:05:53.504 E/AndroidRuntime(18996): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
09-07 10:05:53.504 E/AndroidRuntime(18996): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
09-07 10:05:53.504 E/AndroidRuntime(18996): at android.app.ActivityThread.access$800(ActivityThread.java:151)
09-07 10:05:53.504 E/AndroidRuntime(18996): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
原因:
从错误提示中提到Theme.AppCompat theme,这是因为我们的activity继承了兼容包中的类(还记得最上面那段代码吗?继承了AppCompatActivity),
它来自android.support.v7.app.AppCompatActivity。
所以就要使用与其配合的AppCompat的theme才行。
解决:
1.根据提示来使用AppCompat的theme,如下:
<activity android:name="com.example.niceDialog.NiceDialogActivity"
android:theme="@style/Theme.AppCompat.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
经过以上种种,终于可以正常运行了,哈哈 ^_^
转载注明出处:http://blog.csdn.net/adayabetter/article/details/77879657
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。