【问题标题】:Android - Compatibility Library v4 Exception (EdgeEffect) java.lang.NoClassDefFoundError: > android.widget.EdgeEffectAndroid - 兼容库 v4 异常 (EdgeEffect) java.lang.NoClassDefFoundError: > android.widget.EdgeEffect
【发布时间】:2012-08-14 01:21:39
【问题描述】:

如果有帮助,我也在使用 SherlockActionBar。

触发此异常的行是:setContentView(R.layout.activity);

我正在使用的课程extends SherlockFragmentActivity

应用名称为 com.testapp.androidapp

类是:com.testapp.androidapp.SwipeyTabsActivity。

我已经在几部手机上试用过这个应用程序,除了在这台设备 Nexus S 上之外,其他所有设备都可以使用。虽然所有设备都报告了 Android 的实际版本号(4.0.1、2.3.3),但这个是唯一具有命名版本 (IceCreamSandwich) 的设备。

问题是,如何确保不会发生此错误?如果有帮助,我不需要效果 (EdgeEffect)。

这些是我的导入:

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.Window;

import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

这个异常的总结是:

引起:java.lang.NoClassDefFoundError: android.widget.EdgeEffect 在 android.support.v4.widget.EdgeEffectCompatIcs.newEdgeEffect(EdgeEffectCompatIcs.java:30) 在 android.support.v4.widget.EdgeEffectCompat$EdgeEffectIcsImpl.newEdgeEffect(EdgeEffectCompat.java:92) 在 android.support.v4.widget.EdgeEffectCompat.(EdgeEffectCompat.java:133) 在 android.support.v4.view.ViewPager.initViewPager(ViewPager.java:290)

完整的 StackTrace:

java.lang.RuntimeException:无法启动活动 组件信息{com.testapp.androidapp/com.testapp.androidapp.SwipeyTabsActivity}: android.view.InflateException:二进制 XML 文件第 22 行:错误 膨胀类 android.support.v4.view.ViewPager 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1859) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1875) 在 android.app.ActivityThread.access$600(ActivityThread.java:122) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1062) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4215) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 在 dalvik.system.NativeStart.main(Native Method) 原因: android.view.InflateException:二进制 XML 文件第 22 行:错误 膨胀类 android.support.v4.view.ViewPager 在 android.view.LayoutInflater.createView(LayoutInflater.java:606) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:489) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:244) 在 com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:119) 在 com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:251) 在 com.testapp.androidapp.SwipeyTabsActivity.onCreate(SwipeyTabsActivity.java:112) 在 android.app.Activity.performCreate(Activity.java:4434) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1823) ... 11 更多原因:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.constructNative(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:417) 在 android.view.LayoutInflater.createView(LayoutInflater.java:586) ... 23 更多原因:java.lang.NoClassDefFoundError: android.widget.EdgeEffect 在 android.support.v4.widget.EdgeEffectCompatIcs.newEdgeEffect(EdgeEffectCompatIcs.java:30) 在 android.support.v4.widget.EdgeEffectCompat$EdgeEffectIcsImpl.newEdgeEffect(EdgeEffectCompat.java:92) 在 android.support.v4.widget.EdgeEffectCompat.(EdgeEffectCompat.java:133) 在 android.support.v4.view.ViewPager.initViewPager(ViewPager.java:290) 在 android.support.v4.view.ViewPager.(ViewPager.java:277) ... 26 更多 android.view.InflateException: Binary XML file line #22: Error 膨胀类 android.support.v4.view.ViewPager 在 android.view.LayoutInflater.createView(LayoutInflater.java:606) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:489) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:244) 在 com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:119) 在 com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:251) 在 com.testapp.androidapp.SwipeyTabsActivity.onCreate(SwipeyTabsActivity.java:112) 在 android.app.Activity.performCreate(Activity.java:4434) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1823) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1875) 在 android.app.ActivityThread.access$600(ActivityThread.java:122) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1062) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4215) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 在 dalvik.system.NativeStart.main(Native Method) 原因: java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.constructNative(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:417) 在 android.view.LayoutInflater.createView(LayoutInflater.java:586) ... 23 更多原因:java.lang.NoClassDefFoundError: android.widget.EdgeEffect 在 android.support.v4.widget.EdgeEffectCompatIcs.newEdgeEffect(EdgeEffectCompatIcs.java:30) 在 android.support.v4.widget.EdgeEffectCompat$EdgeEffectIcsImpl.newEdgeEffect(EdgeEffectCompat.java:92) 在 android.support.v4.widget.EdgeEffectCompat.(EdgeEffectCompat.java:133) 在 android.support.v4.view.ViewPager.initViewPager(ViewPager.java:290) 在 android.support.v4.view.ViewPager.(ViewPager.java:277) ... 还有 26 个 java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.constructNative(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:417) 在 android.view.LayoutInflater.createView(LayoutInflater.java:586) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:489) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:244) 在 com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:119) 在 com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:251) 在 com.testapp.androidapp.SwipeyTabsActivity.onCreate(SwipeyTabsActivity.java:112) 在 android.app.Activity.performCreate(Activity.java:4434) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1823) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1875) 在 android.app.ActivityThread.access$600(ActivityThread.java:122) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1062) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4215) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 在 dalvik.system.NativeStart.main(Native Method) 原因: java.lang.NoClassDefFoundError: android.widget.EdgeEffect 在 android.support.v4.widget.EdgeEffectCompatIcs.newEdgeEffect(EdgeEffectCompatIcs.java:30) 在 android.support.v4.widget.EdgeEffectCompat$EdgeEffectIcsImpl.newEdgeEffect(EdgeEffectCompat.java:92) 在 android.support.v4.widget.EdgeEffectCompat.(EdgeEffectCompat.java:133) 在 android.support.v4.view.ViewPager.initViewPager(ViewPager.java:290) 在 android.support.v4.view.ViewPager.(ViewPager.java:277) ... 还有 26 个 java.lang.NoClassDefFoundError: android.widget.EdgeEffect at android.support.v4.widget.EdgeEffectCompatIcs.newEdgeEffect(EdgeEffectCompatIcs.java:30) 在 android.support.v4.widget.EdgeEffectCompat$EdgeEffectIcsImpl.newEdgeEffect(EdgeEffectCompat.java:92) 在 android.support.v4.widget.EdgeEffectCompat.(EdgeEffectCompat.java:133) 在 android.support.v4.view.ViewPager.initViewPager(ViewPager.java:290) 在 android.support.v4.view.ViewPager.(ViewPager.java:277) 在 java.lang.reflect.Constructor.constructNative(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:417) 在 android.view.LayoutInflater.createView(LayoutInflater.java:586) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:489) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:352) 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:244) 在 com.actionbarsherlock.internal.ActionBarSherlockNative.setContentView(ActionBarSherlockNative.java:119) 在 com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:251) 在 com.testapp.androidapp.SwipeyTabsActivity.onCreate(SwipeyTabsActivity.java:112) 在 android.app.Activity.performCreate(Activity.java:4434) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1823) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1875) 在 android.app.ActivityThread.access$600(ActivityThread.java:122) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1062) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4215) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    如果您在异常发生之前在 LogCat 中向上滚动一点,您会看到一条类似 Unable to find the superclass for that class 的行。

    您会收到此错误的原因只有三个:

    1. 该类确实不存在。如果您使用官方示例中的代码并获取此代码,请确保您拥有最新版本的库
    2. 您尚未将 jar 添加到构建路径中。要解决此问题,请右键单击 Eclipse 中的 jar,然后执行 Build Path ► Add to Build Path。
    3. 您的 jar 不在 /libs 文件夹中。当您将 jar 添加到构建路径时会发生这种情况,但较新版本的 ADT 需要它位于 /libs 中。把它放在那里,然后重新添加到构建路径中。

    【讨论】:

    • 问题是,这段代码在至少 12 种不同型号的设备上运行良好。我已经正确地包含了这些库。
    • 您是否在运行自定义 ROM,因为我的 Nexus S 报告的是版本号,而不是名称。
    • 不,这是另一件奇怪的事情,哈哈。我们看到这台 Nexus S 放在办公室里,就开始使用它。我第一次看到非数字版本代码。
    • 我见过那些通常处于 Beta 版或非官方或泄露的操作系统版本。您是否尝试过将库存固件刷入它?
    猜你喜欢
    • 2013-06-22
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多