0



我的 Android 应用程序刚刚崩溃(“...已意外停止”),我对其进行了调试,以便知道它在哪里崩溃:

Log.d( "myapp", "note 1" );
try
{
    Bla1 bla = new Bla1();
}
catch( Exception e )
{
    Log.d( "myapp", e.getMessage() );
}
Log.d( "myapp", "note 2" );

“note 1”是应用程序崩溃前打印到日志的最后一件事。我在 Bla1 的构造函数中也有一个 Log.d 语句,显然从未执行过。此代码片段发生在 MainActivity 类(它扩展了 Activity)的方法中。Bla1 是 MainActivity 的内部类,扩展了抽象类 Bla,Bla 也是 MainActivity 的内部类。
在 logcat 中出现了这两行:

E/dalvikvm(20567):找不到类 'com.tb.myapp.MainActivity$Bla1',引用自方法 com.tb.myapp.MainActivity.parseFile
E/dalvikvm(20567):找不到类 'com.tb .myapp.MainActivity$Bla',引用自方法 com.tb.myapp.MainActivity$MyTextWatcher.afterTextChanged

因此无法创建这些实例,从而导致:

E/AndroidRuntime(20567):致命异常:主要
E/AndroidRuntime(20567):java.lang.NoClassDefFoundError:com.tb.myapp.MainActivity$Bla1

2 个内部类(Bla 和 Bla1)的代码在这里:http ://pastebin.com/9hAGdubb

有谁知道如何解决这个问题?我完全不知道。
提前致谢。

4

1 回答 1

0

我可以通过将嵌套类复制到自己的文件中并使它们成为“正常”(非嵌套)类来解决我的问题。
虽然这是可行的,但它可能不是最好的,甚至不是一个好的解决方案,因为有理由让类嵌套类。(请参阅“为什么使用嵌套类?” http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

如果有人想出另一种解决方案,如果您让我们知道,我将不胜感激。

于 2013-07-15T18:26:01.523 回答