1

だから私はここ数日たくさん試しました...

XMPP サーバーと PC 用のクライアントを問題なく構築しました。

Android用のクライアントの作成を開始したよりも...ええ..これ以上エラーを読みたくないだけだと言います..

XMPP、Android、PubSub のバグに関するすべての記事を読みました。今、私はこのapkを構築しました。

接続してオンラインを維持できます。私の問題は、ノードを構築できないことです。

だからこれは私のコードです:

`

package com.Eis.androidclient;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.pubsub.LeafNode;
import org.jivesoftware.smackx.pubsub.PayloadItem;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jivesoftware.smackx.pubsub.PublishItem;
import org.jivesoftware.smackx.pubsub.SimplePayload;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class Client extends Activity {

static {
    XMPPConnection.DEBUG_ENABLED = true;
}

ConnectionConfiguration connConfig = new ConnectionConfiguration(
        "192.168.0.100", 5222);
XMPPConnection connection = new XMPPConnection(connConfig);
String pubSubAddress = "pubsub."+ connection.getServiceName();
PubSubManager manager = new PubSubManager(connection,pubSubAddress);
SimplePayload payload = new SimplePayload("session",
        "pubsub:NewNode:session", "<sessionId>5678</sessionId>");
PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>(null,
        payload);



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    org.jivesoftware.smack.SmackAndroid.init(this);
    Button node = (Button)findViewById(R.id.button1);

    node.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            node();     
        }
    });





    Thread thread = new Thread(){
        public void run(){

            try {
                connection.connect();
                connection.login("tester", "tester");
            } catch (XMPPException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    };

    thread.run();
    // putting null for id means you let server generate id
    // you could use publish() for asynchronous call


}

public void node(){


    PubSubManager manager = new PubSubManager(connection);
    LeafNode myNode = null;

   // manager.discoverNodes("NewNode");
    try {
        manager.getNode("NewNode");
        System.out.println("found");
        manager.deleteNode("NewNode");
        System.out.println("delete");
    } catch(XMPPException e){
        System.out.println("nothing to do");
        e.printStackTrace();
    }
    try{
        myNode = manager.createNode("NewNode2");
        System.out.println("created");
    } catch (XMPPException e) {
        System.out.println("nothing created");
        e.printStackTrace();
    }




    // you could use publish() for asynchronous call

//      try {
//          myNode.send(item);
//          System.out.println("versendet");
//      } catch (XMPPException e) {
//          System.out.println("wird nicht gesendet");
//          e.printStackTrace();
//      }



}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

} `

私のアプリは VM 2.3.3 で実行されているため、スレッドの問題は発生しません。

ここにエラーログがあります

07:20:48 PM RCV (1079090656): <iq type="error" id="s1YUr-9" from="pubsub.nils-lappi" to="tester@nils-lappi/Smack"><pubsub xmlns="http://jabber.org/protocol/pubsub"><create node="NewNode2"/></pubsub><error code="409" type="cancel"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

なぜ競合があるのか​​ わかりませんが、残りは問題ないようです

競合によるエラー コード: at org.jivesoftware.smackx.pubsub.packet.SyncPacketSend.getReply(SyncPacketSend.java:53)

うまくいけば、ここの誰かが私を助けてくれます...

4

1 に答える 1

0

ノードNewNode2は既に存在し、再度作成しようとしています。

注: PubsubManager の作成を単純化して、

new PubsubManager(connection);

サービス名としてのpubsubの使用は、実際にはデフォルトです。

于 2012-12-04T14:20:19.230 に答える