ошибка потока asmack (host-unknown) - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь написать демо-версию Android с asmack.Произошла ошибка с именем “host-unknown”.Как мне это решить?

Вот что я вижу в LogCat:

03-16 08:31:10.671: I/getConnection(795): connect success
03-16 08:31:10.905: W/System.err(795): stream:error (host-unknown)
03-16 08:31:10.905: W/System.err(795):    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:261)
03-16 08:31:10.912: W/System.err(795):    at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
03-16 08:31:10.912: W/System.err(795):    at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:71)

Мой код:

private static String host = "172.16.131.99";
private static int port = 5222;

private Button btnLogin;

private static XMPPConnection connection = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnLogin = (Button) findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (login()) {
                showMessage("Login success");
            } else {
                showMessage("Login failure");
            }
        }

    });
}

private XMPPConnection getConnection() {
    if (connection == null) {
        ConnectionConfiguration config = new ConnectionConfiguration(host, port, "");
        // use TLS
        config.setSecurityMode(SecurityMode.required);
        try {
            connection.connect();
            Log.i("getConnection", "connect success");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return connection;
}

private boolean login() {
    try {
        // login
        getConnection().login("admin", "123456");
        Log.i("Login", "login success");

        // set status
        Presence presence = new Presence(Presence.Type.available);
        getConnection().sendPacket(presence);
        Log.i("Login", "set status success");

        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return false;
}

private void showMessage(String message) {
    Toast.makeText(this, message, 1000).show();
}

Edit2

Код XML-файла очень прост, содержит только кнопку.

Мой код XML-файла:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button android:id="@+id/btnLogin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/login" />
</LinearLayout>

1 Ответ

4 голосов
/ 05 сентября 2012
  1. Прежде всего, я не думаю, что ваш код может работать, потому что после проверки соединения == ноль, вы не инициализируете соединение, просто используйте: connection = new XMPPConnection (config);
  2. Я встречал ситуацию с неизвестным хостом, проблема в том, что мы не указываем имя сервиса в конструкторе ConnectionConfiguration (вы указали его в виде пустой строки). Обычно, если адрес электронной почты пользователя имеет вид: user@something.com, имя службы будет «some.com». В любом случае, вы можете получить точное имя службы после подключения к серверу (после успешного выполнения connection.connect ()) с помощью xmpp.getServiceName () (вы можете войти, чтобы увидеть результат, например: Log.e ("Service Имя ", xmpp.getServiceName ()), затем просмотрите Logcat и скопируйте имя службы в конструктор).
  3. Понравилось. :)
...