java - 在android studio-Java中从python服务器接收数据到客户端
问题描述
我正在使用 websockets 将字符串从 python 服务器传递到 android studio java 客户端。我检查了服务器发送的字符串(通过在python中打印它)并且有效,所以我想问题是我如何在java中获取数据。
我需要发送这样的东西:我在 python 中有一个保存数据的列表。我不知道她的长度,所以我用len(my_list)
发送。当然,我的列表中甚至有单元格,我每次都需要发送两个单元格。那是我的Java代码:
服务器处理程序:
package cyber_pro4.com;
import android.content.Context;
import android.widget.Toast;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
public class ServerHandler
{
private OkHttpClient client;
private WebSocket ws;
private WebSocketListener listener;
private Context context;
private String message = "";
public ServerHandler(Context context) {
this.context = context;
init();
}
private void init() {
client = new OkHttpClient();
listener = new SocketListener();
}
public void start() {
Request request = new Request.Builder().url("ws://10.0.0.22:8080").build();
ws = client.newWebSocket(request, listener);
Toast.makeText(context, "connected to server", Toast.LENGTH_SHORT).show();
}
public void sendMessage(String message) {
ws.send(message);
}
public String getMessage() {
System.out.println("BATMAN GET " + message);
String msg = message;
message = "";
return msg;
}
public void resetMessage() { message = ""; }
public void closeConnection() {
client.dispatcher().executorService().shutdown();
}
private final class SocketListener extends WebSocketListener {
@Override
public void onMessage(WebSocket webSocket, String text) {
message = text;
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(1000, null);
}
}
}
我获取数据的方式:
ServerHandler serverHandler2;
serverHandler2 = new ServerHandler(Fish_info.this);
serverHandler2.start();
serverHandler2.sendMessage("send pic of fish");
String message,message2;
int i = 1;
while (i > 0)
{
message = "";
while ((message = serverHandler2.getMessage()).equals("")) {
} //this string
if (!(message.equals("false"))) // if the server return false- that mean this is the end of my list
{
message2 = "";
while ((message2 = serverHandler2.getMessage()).equals("")) {
} //this string is a info
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
Toast.makeText(this, message2, Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "There you go- the end of the list", Toast.LENGTH_LONG).show();
i = -5;
}
}
我只敬酒列表的前两个单元格,即使列表有 4 个单元格。这是为什么?
解决方案
我设法做到了,对于那些将来需要它的人——我只是serverHandler2.sendMessage("send pic of fish");
在从服务器接收到所有数据之前做了一个。(通过代码接收message = "";
while ((message = serverHandler2.getMessage()).equals("")) {
} //this string
)
推荐阅读
- html - Flex 表 CSS 截断问题
- c - C程序的内存布局(栈和堆)
- haskell - Haskel - 有两个论点的数据实例
- ruby-on-rails - 在rails中结合两种方法
- sql-server - “字符串或二进制数据将被截断”的解决方案
- java - 为什么 synchronized(ThreadB) ,ThreadB destroy 可以自动通知?
- docker - 1 out 5 fluentd 处于 ImagePullBackOff 状态
- php - 为 SAAS 客户组织 DNS 服务
- node.js - 我使用 create-react-app 创建了一个应用程序,但我无法通过“npm start”启动它
- c# - 枚举名称生成 nswag 和 swashbuckle