我有一个客户端,可以通过 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/