哪个XMPP库是Android开发的最佳选择?
我一直在使用修补的Smack库,正如在SO中的许多其他问题中所建议的那样.但是,这是两年前Smack API的补丁版本.虽然它通常运作良好,但我正在探索任何其他更近期的选择.
我一直在看官方的Smack API,经过一些研究后,它似乎现在可能工作得很好(虽然我还没有在实际应用程序中尝试过).
还有我遇到的另一个解决方案,Beem的aSMACK库.Beem是一个相当新的Android的XMPP客户端,据我所知,他们正在使用他们自己的修补版本的aSMACK.
最后,还有aSMACK,但也有一段时间没有更新(如网站所示).
您有任何其他建议或者您能解释为什么我应该选择以上其中一种吗?
我有一个TableView
具有附加侦听器的应用程序,因此一旦检测到更改就会刷新,但问题是我得到了java.lang.IllegalStateException: Not on FX application thread; currentThread = Smack Listener Processor (0)
.这是我的代码:
/**
* This function resets the pagination pagecount
*/
public void resetPage() {
try {
System.out.println("RESET");
int tamRoster = this.loginManager.getRosterService().getRosterList().size();
paginationContactos.setPageCount((int)(Math.ceil(tamRoster*1.0/limit.get())));
int tamEnviados = this.loginManager.getRosterService().getEnviadasList().size();
paginationEnviadas.setPageCount((int)(Math.ceil(tamEnviados*1.0/limit.get())));
int tamRecibidas = this.loginManager.getRosterService().getRecibidasList().size();
paginationRecibidas.setPageCount((int)(Math.ceil(tamRecibidas*1.0/limit.get())));
} catch (Exception e) {
e.printStackTrace();
}
}
public void doSomething () {
this.loginManager.getRosterService().getRosterList().addListener(new ListChangeListener<RosterDTO>() {
@Override
public void onChanged(
javafx.collections.ListChangeListener.Change<? extends RosterDTO> c) {
// TODO Auto-generated method stub
resetPage();
while (c.next()) …
Run Code Online (Sandbox Code Playgroud) 使用asmack接收文件时遇到问题.在这里,我粘贴我发送和接收日志的错误和数据包
// error
04-21 19:21:05.109: WARN/System.err(7401): Error in execution:
04-21 19:21:05.109: WARN/System.err(7401): -- caused by: java.util.concurrent.ExecutionException:
04-21 19:21:05.109: WARN/System.err(7401): -- caused by: No response from remote client:
04-21 19:21:05.109: WARN/System.err(7401): at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.negotiateStream(IncomingFileTransfer.java:199)
04-21 19:21:05.109: WARN/System.err(7401): at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer.access$100(IncomingFileTransfer.java:47)
04-21 19:21:05.109: WARN/System.err(7401): at org.jivesoftware.smackx.filetransfer.IncomingFileTransfer$1.run(IncomingFileTransfer.java:124)
04-21 19:21:05.109: WARN/System.err(7401): at java.lang.Thread.run(Thread.java:1019)
04-21 19:21:05.109: WARN/System.err(7401): Nested Exception:
04-21 19:21:05.109: WARN/System.err(7401): java.util.concurrent.ExecutionException:
04-21 19:21:05.109: WARN/System.err(7401): -- caused by: No response from remote client:
04-21 19:21:05.109: WARN/System.err(7401): at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:234)
04-21 19:21:05.109: WARN/System.err(7401): at java.util.concurrent.FutureTask.get(FutureTask.java:91)
04-21 19:21:05.109: WARN/System.err(7401): …
Run Code Online (Sandbox Code Playgroud) 我使用Android的asmack-android-7-beem库.我有一个后台服务正在运行,例如我的应用程序保持活动状态.但迟早XMPP连接会在没有任何通知的情况下死亡.服务器说客户端仍然在线,但没有发送或接收数据包.
例如,当其他客户端具有新的存在时,客户端不接收任何存在分组.我有XMPPConnection作为我的主要Application类的一个属性.
我ConnectionConfiguration config.setReconnectionAllowed(true)
在连接之前设置了.
但重新连接不会发生.XMPPConnection connection.isConnected()
返回true.
因此客户端不知道连接实际上已丢失.
有没有办法保持连接活着?
我正在寻找这个答案使用您自己的XMPP服务器为Android聊天应用程序(Smack API)来了解可用的XMPP API.Smack似乎是个不错的选择.
在Smack 4.1之前,必须依赖aSmack.从4.1开始,Smack将在Android上本机运行.我有几个"入门"问题.
问题1:
如何在Eclipse的Android项目中包含Smack 4.1?
这里的说明https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide似乎适用于Android Studio
问题2:
Android的代码是否保持不变?
我在这里指的是他们的官方文档:https://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html
我想知道的是API的用法是否保持不变Android也是.
我读了一些例子并对它们进行了测试,但所有这些都需要先与某人开始聊天才能收到传入的消息...我想要检索这些传入消息而不需要先与jid交谈,任何人都可以举个例子吗?
我正在尝试使用Smack 4.1.0-rc3来实现连接到ejabberd xmpp服务器的java xmpp客户端.我使用以下代码连接到服务器.
XMPPTCPConnectionConfiguration connConfig = XMPPTCPConnectionConfiguration
.builder()
.setServiceName("example.com")
.setHost("192.168.56.101")
.setPort(5222)
.setCompressionEnabled(false)
.setSecurityMode(SecurityMode.disabled)
.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
})
.setUsernameAndPassword(user, pass).build();
connection = new XMPPTCPConnection(connConfig);
connection.connect();
connection.login();
Run Code Online (Sandbox Code Playgroud)
执行'connection.login()'时,我得到以下NullPointerException.
Exception in thread "main" java.lang.NullPointerException
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64)
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60)
at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:199)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:169)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:236)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:365)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:452)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:410)
at org.org.oodlezz.unio.jabber.client.XmppClient.connect(XmppClient.java:88)
at org.org.oodlezz.unio.jabber.client.Client.main(Client.java:32)
Run Code Online (Sandbox Code Playgroud)
我在代码中做错了吗?你能指点一下使用Smack 4.1.0-rc3的正确例子吗?
我正在尝试使用ejabberd服务器和smack库实现聊天信使,但很难整合所有的jar和smack的依赖.我正在使用android Studio.
我的build.gradle(模块):
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.nit.xmppclient"
minSdkVersion 18
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile "org.igniterealtime.smack:smack-android:4.1.0"
compile "org.igniterealtime.smack:smack-tcp:4.1.0"
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0"
compile 'org.ogce:xpp3:1.1.6'
}
Run Code Online (Sandbox Code Playgroud)
首先我得到XMLpullparser错误然后我添加了xpp3.但是在我添加了xpp3后,我得到了
Error:Gradle: Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)
的build.gradle(项目):
// Top-level build file where …
Run Code Online (Sandbox Code Playgroud) 我是android的新手xmpp/asmack.
谁能帮助我获得用户朋友的存在(名单)
我用这个:
Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();
Run Code Online (Sandbox Code Playgroud)
我还应该做些什么来获取我名单中列出的每个用户的可用性状态.
我正在使用smack 3.1.0,当我添加一个名册时,我无法获得"两者"的订阅.谁能帮我?下面是我的代码:
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
Roster roster = connection.getRoster();
roster.createEntry("buddy@test.com","me",null)
Run Code Online (Sandbox Code Playgroud)
代码执行后,我在openfire中观察到订阅是"到"