首页 > 解决方案 > 在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 个单元格。这是为什么?

标签: javaandroidpython

解决方案


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


推荐阅读