1

AndroidでHibernateを使用しようとしています。(Eclipse Android 2.2 SDK)
を含む行にコンパイルエラーがあるようです

HibernateUtility.getSessionFactory().openSession();  

HibernateUtility クラスは次のとおりです。

public class HibernateUtility {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Eclipse でのコンパイル エラーは次のとおりです。

タイプ javax.naming.Referenceable を解決できません。必要な .class ファイルから間接的に参照されている

パッケージ javax.namaing.* を含む Java sdk (Sun JDK macosx) からファイル rt.jar をコピーしましたが、コンパイル エラーは解決されたようです。しかし、Android SDK Logcat から以下のランタイム エラーが発生するようになりました。

08-30 15:21:05.123: W/dalvikvm(240): VFY: 署名で参照されているクラスが見つかりません (Lorg/hibernate/SessionFactory;) 08-30 15:21:05.123: I/dalvikvm(240): 可能性がありますメソッド org.hibernate.SessionFactory.openSession が見つかりません。メソッド com.example.testfordatabase.EtityDao.insert から参照されています 08-30 15:21:05.123: W/dalvikvm(240): VFY: インターフェイス メソッド 102 を解決できません: Lorg/ hibernate/SessionFactory;.openSession ()Lorg/hibernate/classic/Session; 08-30 15:21:05.123: D/dalvikvm(240): VFY: オペコード 0x72 を 0x000b に置き換える/testfordatabase/EtityDao;.insert (Lcom/example/testfordatabase/entity;)V 08-30 15:21:05.123: D/step1(240): Step1 08-30 15:21:05.133: E/dalvikvm(240) : クラス 'org.hibernate.cfg.Configuration' が見つかりませんでした。メソッド com.example.testfordatabase.HibernateUtility から参照されます。08-30 15:21:05.133: W/dalvikvm(240): VFY: Lcom/example/testfordatabase/HibernateUtility で新しいインスタンス 65 (Lorg/hibernate/cfg/Configuration;) を解決できません。08-30 15:21:05.133: D/dalvikvm(240): VFY: オペコード 0x22 を 0x0000 に置き換える/testfordatabase/HibernateUtility;. ()V 08-30 15:21:05.133: W/dalvikvm(240): VFY: 署名で参照されているクラスが見つかりません (Lorg/hibernate/SessionFactory;) 08-30 15:21:05.133: W/System.err (240): 最初の SessionFactory の作成に失敗しました。Lcom/example/testfordatabase/HibernateUtility; 中にスローされます。08-30 15:21:05.133: D/AndroidRuntime(240): VM をシャットダウンしています 08-30 15:21:05.133: W/dalvikvm(240): threadid=1: キャッチされない例外で終了するスレッド (group=0x4001d800) 08 -30 15:21:05.173: E/AndroidRuntime(240): 致命的な例外: メイン 08-30 15:21:05.173: E/AndroidRuntime(240): java.lang.ExceptionInInitializerError 08-30 15:21:05.173: E /AndroidRuntime(240): com.example.testfordatabase.EtityDao.insert(EtityDao.java:35) 08-30 15:21:05.173: E/AndroidRuntime(240): com.example.testfordatabase.MainActivity$1.onClick で(MainActivity.java:34) 08-30 15:21:05.173: E/AndroidRuntime(240): android.view.View.performClick(View.java:2408) 08-30 15:21:05.173: E/AndroidRuntime (240): android.view.View$PerformClick.run(View.java:8816) 08-30 15:21:05.173:

助けてください:Dありがとう

4

1 に答える 1

1

すべての標準 Java クラスが Android で使用できるわけではありません。それらの 1 つは、パッケージ javax.naming です。これが、この問題が発生する理由です。ただし、他のソースから不足しているクラスを追加することはできます。(またはそれらをリッピングする orr rt.jar )-しかし、これを行うと、完全なJavaランタイムが複製される可能性があります。とにかく、休止状態はAndroidには少し重すぎることがわかりました。

于 2012-08-30T11:31:22.643 に答える