对于一个应用程序,我需要能够创建一个多用户聊天室并加入它.聊天服务器是一个openfire服务器.
我曾经有过:
MultiUserChat chat = new MultiUserChat(connection, roomName + "@conference.localhost");
chat.join(nickname);
Run Code Online (Sandbox Code Playgroud)
当房间不存在时,它会创建房间并加入.但是下一个用户无法加入.他得到了404,收件人不可用(404).这表明聊天室被锁定了什么.
然后我在文档中找到了代码并尝试了以下内容:
chat.create(nickname);
// Send an empty room configuration form which indicates that we want
// an instant room
chat.sendConfigurationForm(new Form(Form.TYPE_SUBMIT));
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行此操作时,它说它在logcat中崩溃并出现以下错误:
03-02 12:04:12.890: E/AndroidRuntime(20872): FATAL EXCEPTION:
AsyncTask #3 03-02 12:04:12.890: E/AndroidRuntime(20872):
java.lang.RuntimeException: An error occured while executing
doInBackground()
03-02 12:04:12.890: E/AndroidRuntime(20872): Caused
by: java.lang.ClassCastException:
org.jivesoftware.smack.packet.DefaultPacketExtension cannot be cast to
org.jivesoftware.smackx.packet.MUCUser 03-02 12:04:12.890:
E/AndroidRuntime(20872): at
org.jivesoftware.smackx.muc.MultiUserChat.getMUCUserExtension(MultiUserChat.java:2002)
03-02 12:04:12.890: E/AndroidRuntime(20872): at
org.jivesoftware.smackx.muc.MultiUserChat.create(MultiUserChat.java:364)
03-02 12:04:12.890: E/AndroidRuntime(20872): at
be.xios.crs.pivi.managers.XmppManager.createOrJoinChatGroup(XmppManager.java:116)
Run Code Online (Sandbox Code Playgroud)
希望有人可以帮助我,并提供一些建议.
我正在开发一个聊天应用程序,用户将与域专家的一个组成员聊天.用户使用我的Android应用程序和域专家使用spark web进行聊天.我制作了Openfire安装程序和Spark Web设置,并使用aSmack库开发了Android聊天应用程序.我的应用用户可以与域专家聊天.到目前为止一切都很好.现在,我想在Android设备上显示用户与任何或特定专家的聊天记录.浏览网页后,我可以为我的开放式服务器安装Monitoring Service插件,该服务器显示管理员端用户的聊天记录,如下所示.
现在我想在我的Android应用程序中展示这段历史,我该如何实现这一目标.任何建议,最受欢迎.我正朝着正确的方向前进吗?还是有简单的方法来完成我的工作?有关此聊天历史记录将存储在Open Fire数据库中的任何信息,以便我可以使用Web服务进行SQL查询和获取数据,这是非常感谢.
我试图通过https://github.com/igniterealtime/Smack与Smack 4.1.0 rc1进行XMPP连接
我遵循了这个指南:https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide导入Gradle.
源代码:
package com.example.xmpp_app;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import java.io.IOException;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the configuration for this new connection
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
configBuilder.setUsernameAndPassword("test@example.com", "password123");
configBuilder.setResource("test");
configBuilder.setServiceName("example.com");
AbstractXMPPConnection connection = new XMPPTCPConnection(configBuilder.build());
// Connect to the server
try {
connection.connect();
} catch (SmackException e) …Run Code Online (Sandbox Code Playgroud) 我正在开发基于asmack lib的Android上的聊天应用程序.我在ListView上显示所有用户,但我使用图像显示在线/离线用户.但它只返回离线图像,即使用户在线,这里是我的代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.buddies);
Controller.getInstance().roster = Controller.getInstance().connection.getRoster();
// ArrayList<Buddy> buddies = new ArrayList<Buddy>();
Collection<RosterEntry> entries = Controller.getInstance().roster.getEntries();
Controller.getInstance().buddyList = new Buddy[entries.size()];
int i = 0;
for (RosterEntry r : entries) {
Buddy bud = new Buddy();
VCard card = new VCard();
try {
ProviderManager.getInstance().addIQProvider("vCard",
"vcard-temp", new VCardProvider());
card.load(Controller.getInstance().connection, r.getUser());
} catch (XMPPException e) {
Log.e("ChatOnAndroid", e.getMessage() + " " + r.getUser() + " "
+ e.getLocalizedMessage());
}
bud.jid …Run Code Online (Sandbox Code Playgroud) 目前我正在使用xmpp/jabber聊天for android.i刚尝试使用Openfire并尝试连接我的jabber account.connection成功.但我无法发送任何message.it显示一些冲突错误.请检查错误日志给我一个解决方案.
Initializing connection to server eworks port 5222
Connected: true
Creating entry for buddy 'testuser2' with name testuser2
Sending mesage 'Hello mate' to user testuser2@eworks
Buddy:testuser2 - Status:null
stream:error (conflict)
at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:306)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
Run Code Online (Sandbox Code Playgroud) 背景:
我已经能够XMPP在android中使用asmack库实现一对一聊天.我也可以向服务器发送状态.我在OpenFire基于聊天的应用程序中使用服务器.
问题:
我正在使用connection.addPacketListener(new PacketListener() 接收消息和IQ数据包,对于我已经将它分类的消息包
PacketFilter Chatfilter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message.getFrom());
Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
messages.add(fromName + ":");
m1=message.getBody();
messages.add(message.getBody());
// Add the incoming message to the list view
/* mHandler.post(new Runnable() {
public void run() {
setListAdapter();
recieve.setText(m1);
}
});*/ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,聊天是一个模块,聊天我正在使用xmpp.当我发送消息时,我使用DeliveryReceiptManager获取该消息传递状态.
DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();
DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener()
{
@Override
public void onReceiptReceived(String arg0, String arg1, String arg2)
{
Log.v("app", arg0 + ", " + arg1 + ", " + arg2);
}
});
Run Code Online (Sandbox Code Playgroud)
但我需要证明该消息是用户READ或不像whatsApp蓝色tickmark,任何人都可以帮助我,我在这里被击中.如何实现此消息读取概念.
提前致谢.
有必要将0313 XEP(0.2)http://xmpp.org/extensions/attic/xep-0313-0.2.html#sect-idp616432附加 到SMACK/ASMACK中.我为此创建了PacketExtension.
public class Archive313 implements PacketExtension {
static final public String NAMESPACE = "urn:xmpp:mam:tmp";
static final public String ELEMENT = "result";
private String Id;
private String Queryid;
private String Stamp;
private String To;
private String From;
private String Type;
private String Body;
public Archive313(String id, String queryid, String stamp, String to, String from, String type, String body) {
Id = id;
Queryid = queryid;
Stamp = stamp;
To = to;
From = from;
Type = type; …Run Code Online (Sandbox Code Playgroud) 问题:无法通过XMPP和OpenFire Server接收发送到我的Android应用程序的文件.我可以成功发送文件.我使用的asmack jar是asmack-jse-buddycloud-2010.12.11.jar
代码:
connConfig = new ConnectionConfiguration("beta.myCompany.co.uk", 5222);
connConfig.setSASLAuthenticationEnabled(true);
try {
connect("username", "password");
} catch (Exception e) {
e.printStackTrace();
}
ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
if(sdm == null)
sdm = new ServiceDiscoveryManager(connection);
fileTransferManager = new FileTransferManager(connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
fileTransferManager.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(FileTransferRequest request) {
IncomingFileTransfer transfer = request.accept();
try {
FileOutputStream fos = openFileOutput(request.getFileName(), Context.MODE_PRIVATE);
InputStream stream = transfer.recieveFile();//THIS FAILS!
fos.write(IOUtils.toByteArray(stream));
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
错误(如果文件是通过Spark发送的): …
我正在使用asmack库实现聊天应用程序.我想启动一个始终运行的服务,其中所有的连接管理任务都要完成,并且应该继续接收传入的数据包并将消息保存在我的sqlite数据库中.当我的应用程序启动时,我希望我的应用程序也会收到通知消息,而后台服务将消息插入sqlite数据库.如何用粘性服务实现这样的结构.是否还需要部分唤醒锁定.因为,有时也会根据特定需求使用http来下载图像.