シンプルなアプリを作ろうとしています。ユーザーが1つの編集テキストを見ると、その中にテキストを入力し、送信を押します...ラップトップ上のサーバーはそのメッセージを受信します。
今、NetworkOnMainThread例外は私に頭痛を与えています......その時NetworkOnMainThread例外のようなものがなかったので、アプリは2.3.3のために完全に動作します。
たくさん検索した..2つの解決策は
- ネットワーキング用の新しいスレッドを作成するまたは
- AsyncTask。
結果なしで両方を試しました。
試してみてください1:別のスレッドで:
今私が理解できたのは、別のスレッドを開始する必要があるということです。Ok。やった。
以下は私のクライアント側のコードです。
EditText e ;
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
e= (EditText) findViewById(R.id.editText1);
tv = (TextView) findViewById(R.id.textView1);
Thread startNetworking = new Thread(new NetworkThread());
startNetworking.start();
}
public void sendMessage(View v){
if(NetworkThread.sendToClient(e.getText().toString()))
tv.setText("Status : Successful");
else
tv.setText("Status : Unsuccessful");
}
sendMessageは、送信ボタンのonClick関数です。別のJAVAファイルNetworkThread.java...があります。
そのためのコードは次のとおりです。
public class NetworkThread implements Runnable{
static DatagramSocket socket;
static InetAddress add;
public void run() {
try {
socket = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
add = InetAddress.getByName("192.168.1.12");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static boolean sendToClient(String message){
DatagramPacket p = new DatagramPacket(message.getBytes(),message.getBytes().length,add,4444);
try {
socket.send(p);
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
}
これはまだ機能しません。私は最初にこの最初の試みを使い果たしたいと思います、それから私はここでAsyncTaskと私が試したことについて尋ねることに移ります。ですから、とりあえず、文字列を送受信するというこの単純なタスクを達成するのを手伝ってください。