无法使用 aSmack 连接到本地 XMPP 服务器
Posted
技术标签:
【中文标题】无法使用 aSmack 连接到本地 XMPP 服务器【英文标题】:Cannot connect to local XMPP server using aSmack 【发布时间】:2015-01-27 21:11:40 【问题描述】:我正在尝试使用此代码从 android 应用程序连接到本地 XMPP 服务器 (Vysper):
// ...
ConnectionConfiguration connectionConfig = new ConnectionConfiguration("192.168.1.107", 5222);
// load file from "Pictures" directory from Internal Memory
File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
file.mkdirs();
connectionConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
System.setProperty("javax.net.ssl.trustStore", file + "/clientkeystore");
Log.i("Info", file.getAbsolutePath());
XMPPConnection connection = new XMPPTCPConnection(connectionConfig);
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
connection.connect();
//...
这是堆栈跟踪:
01-27 20:41:07.489 3229-3229/ E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bm.sam, PID: 3229
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3823)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3818)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:232)
at com.bm.sam.LoginActivity.onClickLoginButton(LoginActivity.java:187)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3818)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
我正在使用 aSmack 4.0.6 和 Android API 19。
已授予Android网络权限和文件权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
怎么了?
【问题讨论】:
【参考方案1】:您的错误日志显示您的 Log.e 为空,因此请先检查该 Log:
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.e(Log.java:232)
【讨论】:
以上是关于无法使用 aSmack 连接到本地 XMPP 服务器的主要内容,如果未能解决你的问题,请参考以下文章
使用 asmack 访问连接到 Ejabberd 的 MySQL
Android with Asmack - 当我连接到 XMPP 时如何获取当前状态信息?
无法连接到服务器。 XMPPException 服务器无响应