AndroidとMinaの統合
2096 ワード
最近は自分が作ったアンドロイドアプリにインスタントチャット機能を入れたいと思い、Minaで実現したいと思ったのも、自分がサボりたいと思って公式のexampleでchatの関連コードを借りて、改造を経て、すぐにjava環境で正常に運用できるようになったからです.問題がないことを確認した後、クライアント側のコードをAndroidに移したが、移植中はうまくいかず、毎回Javaだった.lang.NoclassDefFoundError,java.lang.NoClassDefFoundError:org/apache/mina/core/filterchain/IoFilterEventですが、実際にはこのクラスは存在し、問題がどこにあるのかしばらく分かりません.
ソースコードは次のとおりです.
アンドロイドバージョンかMinaバージョンの問題かと思いきや、いくつかのバージョンを試しても同じ問題があったので、ゆっくり原因を探すしかありませんでした.最終的に原因を見つけ、mdcフィルタを加えると、このようなエラーが報告されるので、サーバ側とClient側にacceptorを注ぎます.getFilterChain().addLast(「mdc」,new MdcInjectionFilter()という行は、その後すべて正常に戻ります.
ソースコードは次のとおりです.
public boolean connect(NioSocketConnector connector, SocketAddress address,
boolean useSsl) {
if (session != null && session.isConnected()) {
throw new IllegalStateException(
"Already connected. Disconnect first.");
}
try {
IoFilter LOGGING_FILTER = new LoggingFilter();
IoFilter CODEC_FILTER = new ProtocolCodecFilter(
new TextLineCodecFactory());
connector.getFilterChain().addLast("mdc", new MdcInjectionFilter());
connector.getFilterChain().addLast("codec", CODEC_FILTER);
connector.getFilterChain().addLast("logger", LOGGING_FILTER);
if (useSsl) {
SSLContext sslContext = BogusSslContextFactory
.getInstance(false);
SslFilter sslFilter = new SslFilter(sslContext);
sslFilter.setUseClientMode(true);
connector.getFilterChain().addFirst("sslFilter", sslFilter);
}
connector.setHandler(handler);
ConnectFuture future1 = connector.connect(address);
future1.awaitUninterruptibly();
if (!future1.isConnected()) {
return false;
}
session = future1.getSession();
login();
return true;
} catch (Exception e) {
return false;
}
}
アンドロイドバージョンかMinaバージョンの問題かと思いきや、いくつかのバージョンを試しても同じ問題があったので、ゆっくり原因を探すしかありませんでした.最終的に原因を見つけ、mdcフィルタを加えると、このようなエラーが報告されるので、サーバ側とClient側にacceptorを注ぎます.getFilterChain().addLast(「mdc」,new MdcInjectionFilter()という行は、その後すべて正常に戻ります.