我有一个android webservice客户端应用程序。我正在尝试使用Java标准的WS库支持。我已将应用程序缩减到最低限度,如下所示,以尝试隔离问题。下面是申请表,
package fau.edu.cse;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ClassMap extends Activity {
TextView displayObject;
@Override
public void onCreate(Bundle savedInstanceState) {
// Build Screen Display String
String screenString = "Program Started\n\n";
// Set up the display
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
displayObject = (TextView)findViewById(R.id.TextView01);
screenString = screenString + "Inflate Disaplay\n\n";
try {
// Set up Soap Service
TempConvertSoap service = new TempConvert().getTempConvertSoap();
// Successful Soap Object Build
screenString = screenString + "SOAP Object Correctly Build\n\n";
// Display Response
displayObject.setText(screenString);
}
catch(Throwable e){
e.printStackTrace();
displayObject.setText(screenString +"Try Error...\n" + e.toString());
}
}
}
tempconvert和tempconvertsoap类位于fau.edu.cse包中。我在Java构建PASTH中包含了JavaSeJavax库。当Android应用程序试图创建“服务”对象时,我得到一个“java. Lang.NoCuffDeFunDror”异常。两个类tempConvertSoap和tempConvert()由wsImport生成。我还使用了javax.jws.中的几个库。和javax.xml.ws..当然,应用程序编译无误,加载正确。我知道应用程序正在运行,因为我的“try/catch”例程正在成功捕获错误并将其打印出来。下面是logcat所说的(注意,它找不到tempconvert)。
06-12 22:58:39.340: WARN/dalvikvm(200): Unable to resolve superclass of Lfau/edu/cse/TempConvert; (53)
06-12 22:58:39.340: WARN/dalvikvm(200): Link of class 'Lfau/edu/cse/TempConvert;' failed
06-12 22:58:39.340: ERROR/dalvikvm(200): Could not find class 'fau.edu.cse.TempConvert', referenced from method fau.edu.cse.ClassMap.onCreate
06-12 22:58:39.340: WARN/dalvikvm(200): VFY: unable to resolve new-instance 21 (Lfau/edu/cse/TempConvert;) in Lfau/edu/cse/ClassMap;
06-12 22:58:39.340: DEBUG/dalvikvm(200): VFY: replacing opcode 0x22 at 0x0027
06-12 22:58:39.340: DEBUG/dalvikvm(200): Making a copy of Lfau/edu/cse/ClassMap;.onCreate code (252 bytes)
06-12 22:58:39.490: DEBUG/dalvikvm(30): GC freed 2 objects / 48 bytes in 273ms
06-12 22:58:39.530: DEBUG/ddm-heap(119): Got feature list request
06-12 22:58:39.620: WARN/Resources(200): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f050000}
06-12 22:58:39.620: WARN/System.err(200): java.lang.NoClassDefFoundError: fau.edu.cse.TempConvert
06-12 22:58:39.830: WARN/System.err(200): at fau.edu.cse.ClassMap.onCreate(ClassMap.java:26)
06-12 22:58:39.830: WARN/System.err(200): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-12 22:58:39.830: WARN/System.err(200): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
06-12 22:58:39.830: WARN/System.err(200): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
06-12 22:58:39.830: WARN/System.err(200): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
06-12 22:58:39.880: WARN/System.err(200): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
06-12 22:58:39.880: WARN/System.err(200): at android.os.Handler.dispatchMessage(Handler.java:99)
06-12 22:58:39.880: WARN/System.err(200): at android.os.Looper.loop(Looper.java:123)
06-12 22:58:39.880: WARN/System.err(200): at android.app.ActivityThread.main(ActivityThread.java:4363)
06-12 22:58:39.880: WARN/System.err(200): at java.lang.reflect.Method.invokeNative(Native Method)
06-12 22:58:39.880: WARN/System.err(200): at java.lang.reflect.Method.invoke(Method.java:521)
06-12 22:58:39.880: WARN/System.err(200): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-12 22:58:39.880: WARN/System.err(200): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-12 22:58:39.880: WARN/System.err(200): at dalvik.system.NativeStart.main(Native Method)
……呜呜……呜呜……呜呜
如果有人能给出一个答案,那就太好了,不过我正在研究调试策略。我已经使用了同一个应用程序,并创建了一个标准的Java客户端应用程序,它运行良好-当然,所有的Android的东西取出。什么是好的调试策略?你建议我尝试哪些方法和技巧来隔离问题?我认为有某种dalvik vm不兼容导致tempconvert类无法加载。tempconvert是一个接口类,它引用了很多非常复杂的webservice属性。任何有关调试策略的帮助都将不胜感激。
谢谢你的帮助,
史蒂夫
最佳答案
这是你的问题:
java.lang.NoClassDefFoundError: fau.edu.cse.TempConvert
从javadocs:
如果Java虚拟机或
类加载器实例尝试加载
在类的定义中(作为一部分
普通方法调用的一部分
使用新实例创建新实例
表达式)没有定义
可以找到类。
搜索类定义
当当前正在执行
类已编译,但定义
找不到了。
听起来你有一个安卓部署或打包问题。它找不到你的类,尽管你的假设。
当你观察到与你的假设相反的行为时,你应该把它们放在一边,从一开始就检查一切。假设一切都是正确的,不管你眼前有什么证据,都会妨碍你找到解决办法。