1

私はほぼ 1 週間このランタイム エラーが発生しており、解決策を見つけることができません (私は新しい Android プログラマーです)。私を助けてください!

ログはこのメッセージの最後にあります。私と同様の質問がいくつかあることは知っていますが、問題の解決策が見つかりませんでした。

を使用してアクティビティからクラスを呼び出そうとしてIntentいますが、このクラスが見つからないというランタイム エラーが表示されます。

これはログ ファイルです。

07-01 13:22:57.098: E/dalvikvm(1488): Could not find class 'com.XXX.ui.ViewPager',
referenced from method com.XXX.ui.MainIWrapper.onCreate
07-01 13:22:57.338: E/AndroidRuntime(1488): FATAL EXCEPTION: main
07-01 13:22:57.338: E/AndroidRuntime(1488): java.lang.RuntimeException: Unable to start
    activity ComponentInfo{com.XXX/com.XXX.ui.MainIWrapper}:

android.view.InflateException: Binary XML file line #43: Error inflating class
com.XXX.ui.NavigationBar
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.os.Handler.dispatchMessage(Handler.java:99)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.os.Looper.loop(Looper.java:130)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.ActivityThread.main(ActivityThread.java:3683)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
java.lang.reflect.Method.invokeNative(Native Method)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
java.lang.reflect.Method.invoke(Method.java:507)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
dalvik.system.NativeStart.main(Native
Method)
07-01 13:22:57.338: E/AndroidRuntime(1488): Caused by: android.view.InflateException:
Binary
XML file line #43: Error inflating class com.XXX.ui.NavigationBar
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at  
android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.inflate(LayoutInflater.java:408)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.inflate(LayoutInflater.java:320)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.inflate(LayoutInflater.java:276)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.Activity.setContentView(Activity.java:1657)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
com.XXX.ui.MainIWrapper.onCreate(MainIWrapper.java:69)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-01 13:22:57.338: E/AndroidRuntime(1488):     ... 11 more
07-01 13:22:57.338: E/AndroidRuntime(1488): Caused by: java.lang.ClassNotFoundException:
com.XXX.ui.NavigationBar in loader dalvik.system.PathClassLoader[/data/app/com.XXX-
2.apk]
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
java.lang.ClassLoader.loadClass(ClassLoader.java:551)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
java.lang.ClassLoader.loadClass(ClassLoader.java:511)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.createView(LayoutInflater.java:471)
07-01 13:22:57.338: E/AndroidRuntime(1488):     at
android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
07-01 13:22:57.338: E/AndroidRuntime(1488):     ... 23 more

これは、インテントを処理する関数です。

private Activity from;
private Class to;

public void open() {
    Intent intent;
    intent = new Intent(from, to);

    if (extras != null) {
        intent.putExtras(extras);
    }

    if (to.equals(MainWrapper.class)) {
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    }

    if (activityForResultRequestCode == -1) {
        from.startActivity(intent);
    } else {
        from.startActivityForResult(intent, activityForResultRequestCode);
    }

    if (pendingAnimation != null && pendingAnimation.length == 2) {
        from.overridePendingTransition(pendingAnimation[0], pendingAnimation[1]);
    } else {
        from.overridePendingTransition(R.anim.slide_in_right, R.anim.hold);
    }

    if (toClosePreviousActivity) {
        from.finish();
    }   
}

これは、アクティビティからの呼び出し(変更する必要があります) と、ロードしたいクラス (open()インテントを実行している関数を使用します) を使用したものです。

UiUtils.getOpenActivityBuilder(SplashScreen.this,MainIWrapper.class).toClosePrev(true).open;

これは私のマニフェストの一部です。クラスに変更する必要があるのは主なアクティビティですMainIWrapper

<activity
    android:name=".ui.SplashScreen"
    android:configChanges="orientation"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.NoTitleBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
 </activity>

これは、マニフェスト ファイルの mainWrapper 宣言です。

<activity
    android:name=".ui.MainIWrapper"
    android:configChanges="orientation"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.NoTitleBar" />

これはmainWrapper宣言です:

public class MainIWrapper extends BaseWebSiteScreen implements HasBox {...}

そして、これは主なアクティビティ宣言です:

public class SplashScreen extends Activity {...}

助けてくれてありがとう

これらは私の XML からの行です (43 行目から):

<com.XXX.ui.NavigationBar
        xmlns:vwpgind="http://schemas.android.com/apk/res/com.XXX"
        android:id="@+id/navigation_bar"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="top"
        vwpgind:arrowImageSrc="@drawable/common_slider_arrow"
        vwpgind:hideFirstItem="true" />

MainIWrapper.OnCreate() のコードは次のとおりです。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_iwrapper);

isUserLoggedIn = UserDetails.getInstance(getApplicationContext()).isUserLoggedIn();

//we want to refresh user thumb each time user opens Main iWrapper
if (UserDetails.getInstance(getApplicationContext()).isUserLoggedIn())
UserDetails.deleteCachedUserThumb(getApplicationContext());

textBox = (TextBox) findViewById(R.id.text_box);
viewPager = (ViewPager) findViewById(R.id.view_pager);

pageViewAdapter = new PageViewAdapter();
viewPager.setAdapter(pageViewAdapter);

viewPager.setOffscreenPageLimit(NUMBER_OF_PAGES_TO_PRELOAD);

navigationBar = (NavigationBar) findViewById(R.id.navigation_bar);
topBar = (TopBar) findViewById(R.id.top_bar);
progressAnimation = (ImageView) findViewById(R.id.progress_animation);
bottomBar = (BottomBar) findViewById(R.id.bottom_bar);

}

私はまだここでエラーを見つけることができません。ビルド パスと、com.XXX.ui パッケージを含む src フォルダーを確認しました (このパッケージには、NavigationBar クラスと ViewPager クラスが含まれています)。


これらは私の XML からの行です (43 行目から):

 <com.XXX.ui.NavigationBar
            xmlns:vwpgind="http://schemas.android.com/apk/res/com.XXX"
            android:id="@+id/navigation_bar"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="top"
            vwpgind:arrowImageSrc="@drawable/common_slider_arrow"
            vwpgind:hideFirstItem="true" />

MainIWrapper.OnCreate() のコードは次のとおりです。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_iwrapper);

isUserLoggedIn = UserDetails.getInstance(getApplicationContext()).isUserLoggedIn();

//we want to refresh user thumb each time user opens Main iWrapper
if (UserDetails.getInstance(getApplicationContext()).isUserLoggedIn())
    UserDetails.deleteCachedUserThumb(getApplicationContext());

textBox = (TextBox) findViewById(R.id.text_box);
viewPager = (ViewPager) findViewById(R.id.view_pager);

pageViewAdapter = new PageViewAdapter();
viewPager.setAdapter(pageViewAdapter);

viewPager.setOffscreenPageLimit(NUMBER_OF_PAGES_TO_PRELOAD);

navigationBar = (NavigationBar) findViewById(R.id.navigation_bar);
topBar = (TopBar) findViewById(R.id.top_bar);
progressAnimation = (ImageView) findViewById(R.id.progress_animation);
bottomBar = (BottomBar) findViewById(R.id.bottom_bar);

}

ここで何が問題なのかまだわかりません

public class ViewPager extends android.support.v4.view.ViewPager {

public ViewPager(Context context) {
    super(context);
}

public ViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public Parcelable onSaveInstanceState() {
    try {
        return super.onSaveInstanceState();
    } catch (Exception e) {
        return null;
    }
}
4

2 に答える 2

2

コンパイラは、レイアウト XML ファイルで参照されているクラスが存在するかどうかをチェックしないため、通常、実行時にのみエラーが発生します。

コムの可能性が高いです。XXX.ui.NavigationBarclass がクラスパスに存在しません。パッケージ名を確認してください。単にタイプミスであるか、NavigationBarクラスのパッケージ名リファクタリング後に XML ファイルでパッケージ名を変更し忘れている可能性があります。

于 2012-07-02T11:23:40.007 に答える
0

エラーはすべてここにあります:

07-01 13:22:57.098: E/dalvikvm(1488): Could not find class 'com.XXX.ui.ViewPager', referenced from method com.XXX.ui.MainIWrapper.onCreate android.view.InflateException: Binary XML file line #43: Error inflating class com.XXX.ui.NavigationBar

MainIWrapper.onCreate() からコードを投稿し、NavigationBar の XML の 43 行目を見てください。

于 2012-07-01T12:03:59.410 に答える