хорошо, у меня есть вопрос о переопределении.Мне нужно переопределить один метод из библиотеки Cling UPnP.Поэтому я расширил класс обслуживания и написал следующий код:
public class UpnpBrowseService extends AndroidUpnpServiceImpl
{
@Override
protected AndroidUpnpServiceConfiguration createConfiguration(WifiManager wifiManager)
{
return new AndroidUpnpServiceConfiguration(wifiManager)
{
@Override
public StreamClient createStreamClient()
{
return new StreamClientImpl(new StreamClientConfigurationImpl() {
public int getConnectionTimeoutSeconds() {
return 2;
}
public int getDataReadTimeoutSeconds() {
return 3;
}
public boolean getStaleCheckingEnabled() {
// comment from AndroidHttpClient.java:
//
// Turn off stale checking. Our connections break all the time anyway,
// and it's not worth it to pay the penalty of checking every time.
return false;
}
public int getRequestRetryCount() {
// since "connections break all the time anyway", limit number of retries to
// minimize time spent in HttpClient.execute()
return 1;
}
});
}
};
}
}
Для целей тестирования метод createStreamClient () теперь такой же, как и в родительском классе. Исходный код родительского класса находится здесь.
Если я прокомментирую этот метод, он в порядке и работает.Но если я использую мой переопределенный метод, я получаю NoClassDefFoundError:
12-14 09:52:12.110: E/AndroidRuntime(20784): FATAL EXCEPTION: Thread 18 (Active: 6)
12-14 09:52:12.110: E/AndroidRuntime(20784): java.lang.NoClassDefFoundError: org.teleal.cling.transport.impl.StreamClientImpl$1$1
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.transport.impl.StreamClientImpl$1.createURLStreamHandler(StreamClientImpl.java:77)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.net.URL.setupStreamHandler(URL.java:551)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.net.URL.<init>(URL.java:286)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.net.URL.<init>(URL.java:157)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.header.LocationHeader.setString(LocationHeader.java:45)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.header.UpnpHeader.newInstance(UpnpHeader.java:171)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.UpnpHeaders.parseHeaders(UpnpHeaders.java:68)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.UpnpHeaders.getAsArray(UpnpHeaders.java:136)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.UpnpHeaders.getFirstHeader(UpnpHeaders.java:143)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.discovery.IncomingSearchResponse.isSearchResponseMessage(IncomingSearchResponse.java:46)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.protocol.async.ReceivingSearchResponse.execute(ReceivingSearchResponse.java:54)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.protocol.ReceivingAsync.run(ReceivingAsync.java:64)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.lang.Thread.run(Thread.java:1019)
Я немного новичок в решении такого рода NoClassDefFoundError, и я не знаю, что с ним делать.Интересно, не могли бы вы помочь мне с этим или хотя бы указать мне какой-нибудь метод, как определить причину этой проблемы?
Я обнаружил, что это исключение возникает только при некотором сбое в статических элементах, нов этом классе их нет.
Большое спасибо!