gpt4 book ai didi

android - Android 上的 jWebSocket 客户端未连接到本地服务器

转载 作者:行者123 更新时间:2023-11-29 00:38:20 27 4
gpt4 key购买 nike

我正在尝试在 Android 上启动一个非常简单的 jWebSocket 客户端并将其连接到我的本地服务器。我将演示中的 JWC 类与 jWebSocket 1.0 beta 8 和 Android 4.0.3 一起使用,我的代码如下所示:

import org.jwebsocket.api.WebSocketClientEvent;
import org.jwebsocket.api.WebSocketClientTokenListener;
import org.jwebsocket.api.WebSocketPacket;
import org.jwebsocket.client.token.BaseTokenClient;
import org.jwebsocket.kit.WebSocketException;
import org.jwebsocket.token.Token;

import android.app.Activity;
import android.content.Context;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import cased.smids.communication.JWC;

public class TasksActivity extends Activity implements WebSocketClientTokenListener {
Spinner spinner;
Button btn_Start;

/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);

JWC.init();

spinner = (Spinner)findViewById(R.id.sp_Task);
btn_Start = (Button)findViewById(R.id.btn_Start);

ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(
this,
R.array.Tasks,
android.R.layout.simple_spinner_item
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

btn_Start.setOnClickListener(new View.OnClickListener() {
public void onClick(View src) {
switch (src.getId()) {
case R.id.btn_Start:
if (spinner.getSelectedItem().toString().equals("Connect")) {
try {
System.out.println("connecting manually...");
JWC.open();
} catch (WebSocketException e) {
e.printStackTrace();
}
}
default:
break;
}
}
});
}

@Override
protected void onResume() {
super.onResume();
System.out.println("* opening... ");
try {
JWC.addListener(this);
JWC.open();
} catch (WebSocketException ex) {
System.out.println("* exception: " + ex.getMessage());
}
}

@Override
protected void onPause() {
System.out.println("* closing... ");
try {
JWC.close();
JWC.removeListener(this);
} catch (WebSocketException ex) {
System.out.println("* exception: " + ex.getMessage());
}
super.onPause();
}

public void processClosed(WebSocketClientEvent arg0) {
System.out.println("closed");
}

public void processOpened(WebSocketClientEvent arg0) {
System.out.println("opened");
}

public void processOpening(WebSocketClientEvent arg0) {
System.out.println("opening");
}

public void processPacket(WebSocketClientEvent arg0, WebSocketPacket arg1) {
System.out.println("packet");
}

public void processReconnecting(WebSocketClientEvent arg0) {
System.out.println("reconnecting");
}

public void processToken(WebSocketClientEvent arg0, Token arg1) {
System.out.println("token");
}
}

所以基本上它只是一个微调器和一个按钮。现在,我只想连接到我的本地 jWebSocketServer。演示应用程序(来自网站的 .apk 包,如果我导入代码,eclipse 会告诉我在编译代码之前删除许多“@Overwrite” - 在出现相同的“错误”之后)与我的服务器一起工作,所以它必须成为代码。现在我得到的只是“正在连接...”,大约 0.1 秒后“关闭”。每次。

顺便说一句。该应用程序具有正确的 INTERNET 和 ACCESS_NETWORK_STATE,因此这应该不是问题。

我将不胜感激。

干杯

最佳答案

事实证明,BaseTokenClient.open() 正在捕获所有异常并且什么也不做(静默失败)。在我的例子中 - NetworkOnMainThreadException。谜团解开了。

关于android - Android 上的 jWebSocket 客户端未连接到本地服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com