【发布时间】:2016-09-15 00:15:58
【问题描述】:
我遇到了一个问题,我无法解决。我正在尝试制作一个接收和发送消息的Android客户端(带有多线程,所以我不必等待发送消息的服务器,反之亦然)和一个为Windows编写的服务器几乎和 Android 客户端一样,接收和发送消息(这里也有多线程)。
final Thread t = new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
try {
in_server = new BufferedReader(new InputStreamReader(client.getInputStream())); //receive from server
//Log.i("Message from server", in_server.readLine());
Toast.makeText(MainActivity.this, in_server.readLine(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
Looper.loop();
}
});
如果我写了一个 while(true) 而不是两个 looper 并且我使用了“Log.i”,我会收到从服务器发送的所有消息,客户端和服务器可以完美地工作。但是,如果我删除“Log.i”并使用“Toast.makeText”并放置两个 Loopers,就像上面的代码一样,我会收到我从服务器发送的第一条消息,其他的则不会收到。我不知道如何解决这个问题。
请不要无礼,我是 Java 新手,我只是在做一些测试,但为此浪费了一个多小时。
【问题讨论】:
-
这可能看起来很傻,但是每次的信息都是一样的吗?如果是这样,那么当实际运行多次时,Toast 似乎只运行一次。如果消息每次都不一样,那我不知道……那是一种很奇怪的行为。
-
我从服务器发送了类似“hi”的信息,在“hello”之后,我只收到了“hi”作为 Toast。如果我在一段时间内使用 Log.i(真),我会在 LogCat 上同时获得“hi”和“hello”。无法解决问题。
标签: java android server client toast