Android-исключение "java.lang.noclassdeffounderror" - PullRequest
2 голосов
/ 13 июня 2010

У меня есть клиентское приложение для Android.Я пытаюсь использовать стандартную поддержку библиотеки Java.Я сократил приложение до минимума, как показано ниже, чтобы попытаться изолировать проблему.Ниже приведено приложение

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 SE библиотеки java SE в сборку java.Когда приложение для Android пытается создать объект «service», я получаю исключение «java.lang.noclassdeffounderror».Два класса tempConvertSoap и TempConvet () создаются с помощью 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, и оно отлично работает - конечно, со всеми вытащенными андроидами.Что было бы хорошей стратегией отладки?Какие методы и методы вы бы порекомендовали мне попробовать и изолировать проблему?Я думаю, что существует какая-то несовместимость Dalvik VM, из-за которой класс TempConvert не загружается.TempConvert - это интерфейсный класс, который ссылается на множество очень сложных атрибутов веб-сервиса.Любая помощь со стратегиями отладки будет с благодарностью.

Спасибо за помощь, Стив

Ответы [ 3 ]

13 голосов
/ 05 сентября 2011

Если вы используете внешнюю библиотеку, например, если вы используете внешнюю библиотеку карты Goolge, вы должны добавить

<uses-library android:name="com.google.android.maps" />

внутри тега <Application> в Android Manifest.xml

6 голосов
/ 13 июня 2010

Вот ваша проблема:

java.lang.NoClassDefFoundError: fau.edu.cse.TempConvert

Из Javadocs:

Брошен, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить в определении класса (как часть нормального вызова метода или как часть создание нового экземпляра с использованием нового выражение) и нет определения класс можно найти.

искомое определение класса существовал, когда в настоящее время выполняется класс был скомпилирован, но определение больше не может быть найден.

Похоже, у вас проблема с развертыванием или упаковкой Android. Он не может найти ваш класс, несмотря на ваши предположения.

Когда вы наблюдаете поведение, которое противоречит вашим предположениям, вы должны отложить их в сторону и проверить все с самого начала. Предполагая, что все правильно, несмотря на доказательства, которые у вас есть перед глазами, мешает найти решение.

2 голосов
/ 24 февраля 2012

Я решил эту проблему, переместив <uses-library android:name="com.google.android.maps" /> внутрь тегов <application> в моем AndroidManifest.xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...