在androidstudioj中从python服务器接收数据到客户端

2024-09-30 18:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用websockets将字符串从python服务器传递到androidstudiojava客户端。我检查了服务器发送的字符串(通过用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个单元格。 为什么


Tags: importclientmessage列表stringcontextprivatepublic
1条回答
网友
1楼 · 发布于 2024-09-30 18:24:22

我设法做到了这一点,为那些将来需要它的人——我只是在从服务器接收所有数据之前做了一个serverHandler2.sendMessage("send pic of fish");(通过message = ""; while ((message = serverHandler2.getMessage()).equals("")) { } //this string代码接收

相关问题 更多 >