6
s=new Scanner(new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())));

        while(s.hasNext()){
             System.out.println("Am intrat in bucla s:");
             longitude=Integer.parseInt(s.next());
             System.out.println("Valoare longitudine:"+longitude);
             latitude=Integer.parseInt(s.next());
             System.out.println(latitude);

上記の行を使用して、クライアントサーバー接続からいくつかのデータを読み取ります。これはサーバー側です。データはスキャナーで読み取られ、その後表示しようとしますが、logcat を見ると何も表示されませんしかし、この例外:

04-18 00:07:56.138: INFO/global(295): BufferedReader コンストラクターで使用されるデフォルトのバッファー サイズ。8k 文字のバッファが必要な場合は、明示することをお勧めします。

私のクライアントとサーバーの両方がAndroid上にあります!誰かが私が間違っていることを知っていますか?

これは私がデータを読み取る方法です。緯度と経度を送信します。空白で区切られていると仮定します。奇妙なことは、時々機能していることです:

        Cursor c=db.getAllData();

           if(c.moveToFirst()) 
             {
              do{

                  longitude=Integer.parseInt(c.getString(1));
                  out.println(longitude);
                  latitude=Integer.parseInt(c.getString(2));
                  out.println(latitude);

              }while(c.moveToNext());

             }
4

2 に答える 2

3

このメッセージは、BufferedReaderコンストラクト用のようです。

まず、コードは期待どおりに機能し、メッセージは「エラー」や「警告」ではなく「情報」であると言っているので、「間違った」ことをしているとは思いません。

次に、BufferedReaderコンストラクターを見ると、次のことがわかります。

BufferedReader(Reader in, int size) 新しい BufferedReader を構築し、バッファの size 文字を提供します。

http://developer.android.com/reference/java/io/BufferedReader.html

代わりにそのコンストラクターを使用すると、そのメッセージは表示されません。

ところで、logcat出力がいっぱいです。一部の行は他の行よりも関連性があります。


Log.dの代わりに使用しSystem.out.println()ます。についてSystem.outhttp://developer.android.com/guide/developing/tools/adb.html

stdout と stderr の表示

デフォルトでは、Android システムは stdout および stderr (System.out および System.err) の出力を /dev/null に送信します。Dalvik VM を実行するプロセスでは、システムに出力のコピーをログ ファイルに書き込むようにさせることができます。この場合、システムはログ タグ stdout および stderr を使用してメッセージをログに書き込みます。どちらも優先度は I です。

この方法で出力をルーティングするには、実行中のエミュレータ/デバイス インスタンスを停止してから、シェル コマンド setprop を使用して出力のリダイレクトを有効にします。方法は次のとおりです。

$ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start

エミュレータ/デバイス インスタンスを終了するまで、システムはこの設定を保持します。エミュレータ/デバイス インスタンスでデフォルトとして設定を使用するには、デバイスの /data/local.prop にエントリを追加します。

于 2011-04-18T12:39:52.450 に答える
1

データの空白で区切られていますか? そうでない場合は、スキャナーの区切り文字を指定する必要があります。

表示されていない例外処理コードがありますか...たとえば、parseIntが失敗した場合にNumberFormatExceptionを非表示にしますか?

この問題をデバッグしている間 (デバッガーをアタッチできない場合)、新しいクライアント接続を受け入れたときや、ワーカー スレッドに出入りしたときなどにメッセージをログに記録できます。これは、データを受信して​​いると思われるときに、データをスキャンするところまで到達しているかどうかを確認するのに役立ちます。

于 2011-04-18T12:30:38.633 に答える