java - 在 Android 应用程序中调用 java 客户端

标签 java android tcp client

我有一个客户端,可以通过 TCP 向服务器发送一些信息:

    public class IR {

    private String host; //server IP address indicated here, I deleted it for posting here
    private int port = 6789;

    private String sentence;
    private String reply;

    public IR(String type) {
        try {

            Socket clientSocket = new Socket(host,port); //IP du server ("localhost" pour un server local) et port utilisé

            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


                Gson gson = new GsonBuilder().create();
                FileReader file = new FileReader("data/userInfo.json");
                String json = "";
                int i = 0;
                while ((i = file.read()) != -1)
                    json += (char)i;
                User user = gson.fromJson(json, User.class);
                String user_id = user.getID();
                int bus_id = user.getBusID();

                sentence = "alerte " + type + " " + user_id + " " + bus_id;
                System.out.println("SENTENCE: " + sentence);
                outToServer.writeBytes(sentence + '\n');
                reply = inFromServer.readLine();
                System.out.println("ANSWER: " + reply);

            clientSocket.close();

        }
        catch (Exception io) {
            System.out.println("Connection refusée: arrêt");
        }
    }
}

我在我的android应用程序中调用这个:我有一个按钮,当我点击它时使用这个方法:

public void signalerComplet(View view)
{
    client = new IR("complet");
    Toast.makeText(this, "envoyé", Toast.LENGTH_SHORT).show();
}

但是我的服务器没有收到任何信息。 不过,我确信当我不在我的 Android 应用程序中使用它时,我的客户端可以正常工作。 有人可以告诉我我在这里缺少什么吗?

编辑在获得赫克托的帮助后:服务器获取我的“bloubloubloub”,但我在“int size = in.read(data);”上得到 android.os.NetworkOnMainThreadException ...

private Socket socket;

  public void signalerComplet(View view)
{
    PrintWriter out = null;
    InputStream in=null;

    byte[] data = new byte[5120];

    try {
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    out.println("bloubloubloub" + '\n');
    out.flush();

    try {
        in = socket.getInputStream();
        int size = in.read(data);
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    Log.e("data from server", data.toString());
}

最佳答案

type.equals(null) 将始终为 false,就好像变量 type 实际上持有 null value 时,它​​将引发 NullPointerException,因为没有针对 null 值的方法 equals。因此 if 主体永远不会执行。

匹配变量是否为 null 的正确方法是使用 == 运算符。

if (type == null) {
  // do this
} else {
  // do that
}
String 上的

equals() 应用于与另一个 String 进行比较。

关于java - 在 Android 应用程序中调用 java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34743678/

相关文章:

java - 如何在 Play 框架中的 Action 中获取调用的 Action 的响应

tcp - 如何证明AIMD在TCP中的公平性?

tcp - IRC 服务器不响应 Rust IRC 客户端识别请求

Java - JFormattedTextField 不允许首次尝试输入

java - 为 Spring TestRestTemplate 集成测试添加 header 值

java - 强制 Spring 使用同一配置类中的 bean

android - Samsung Galaxy 使用什么浏览器?

android - 显示即将到来的 Facebook 好友生日

android - 在android中获取GPS坐标

sockets - 现有的 TCP 中继解决方案