0

Android アプリから Java プログラムにソケット経由でメッセージを送信します。このメッセージは、プリントライターで送信されます。

AndroidからJavaプログラムにメッセージを送信する方法は次のとおりです。

out.println("Hello there");
out.flush();

これは私がメッセージを受け取る方法です:

while(true){
String msg = in.readLine();

System.out.println("MSG: " + msg);

...some if-statements...
}

System.out.println の出力は次のとおりです。 MSG: Hello there * MSG: null *

なぜそこにnullになるのですか?「こんばんは」だけ送っています。

助けていただければ幸いです、ありがとう!

編集: Java プログラムの実際のコード。

while (run) {
            String msg = in.readLine();
            String[] parts;  
            String username;
            String password = null;

            System.out.println("MSG: " + msg);

            parts = msg.split("\\*");
            username = parts[0];
            password = parts[1];

            boolean validUser = false;

            validUser = db.authenticate(username, password);

            if (validUser) {
                        db.updateIP(username,                     socket.getInetAddress().getHostAddress());
                        out.println("done");
                        out.flush();
            } else {
                        out.println("loginfail");
                        out.flush();
                        closeSocketConnection();
                }
            }
        }

    private void closeSocketConnection() throws IOException {
        in.close();
        out.close();
        socket.close();
        run = false;
    }
4

2 に答える 2

0

whileループの終了条件は何ですか?

繰り返しているように見え、ストリームの終わりに達して印刷されるreadLineと戻ってきます。nullMSG: null

与えられた新しい情報を更新しました:

user*123有効なユーザー名/パスワードの組み合わせであると仮定すると、closeSocketConnection()呼び出されることはなく、ループが最初に戻り、readLine戻りnull、誤った出力が表示されます。続いてNullPointerExceptionオンparts = msg.split("\\*");

于 2013-10-10T19:42:10.427 に答える