-2

私は Android と Java プログラミングの初心者で、行き詰まっています。

Windows ベースの Web サーバーでテキスト メッセージを送信する TCP/IP 通信クライアント (Over LAN) を作成できました。このコードは、現在 2.3.6 で実行されている私の Samsung Galaxy S Advance 携帯電話で非常にうまく機能しています。ただし、Android 4.0 と Android 4.1 を実行している他の 2 つのデバイスで apk ファイルを試してみると、アプリは実行されていますが、PC にメッセージが届きません (テストは同じネットワークで実行されます)。

パケットの送信に使用している関数は次のとおりです。

public void sednit(String IP,String MSG) {
try {
        // Socket  s = new Socket ("192.168.128.102",39999);
      Socket  s = new Socket (ipaddress,39999);
       //outgoing stream redirect to socket
       OutputStream  out = s.getOutputStream();
       PrintWriter  output = new PrintWriter (out);
       output.println(MSG);
       output.flush();
       BufferedReader  input = new BufferedReader (new InputStreamReader(s.getInputStream)));
       //read line(s)
       String  st = input.readLine();
       //Close connection
       s.close();
      } catch (Exception e) {
        // Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show();
          Toast.makeText(getApplicationContext(), "Unable to communicate with player", Toast.LENGTH_LONG).show();
      }

私は何を間違っていますか?

Android 4 以降に適用される制限はありますか、それともマニフェスト ファイルを台無しにしましたか?

ありがとうございました。

4

2 に答える 2

1

ほとんどの場合、NetworkOnMainThread例外が発生します。Android Honeycomb 以降、UI の応答性を向上させるために、別のスレッドでネットワーク操作を実行する必要があります。これを行う最も簡単な方法は、ネットワーク操作が短い場合は を使用して管理するか、接続を維持する必要がある場合はAsyncTask拡張することです。java.io.Thread

于 2012-11-09T09:49:10.580 に答える
0

Tomislav がコメントで述べているように、ネットワーク通信には Asynctask を使用します。
またcatch (Exception e) {、非常に悪いアイデアです..あなたが期待している例外をキャッチして、他の例外がスローされ、それらを見ることができるようにします。これを行っているときに、プログラムで何が問題になっているのか、私たちはまったくわかりません...

したがって、e.printStackTrace(); のいずれかを実行してください。または、try/catch を削除して、logcat を取得して支援できるようにします。

于 2012-11-09T09:17:20.157 に答える