UDP プログラムに取り組んでいますがsetText
、asynctask
. 基本的にUDPサーバーでは、ポートを入力するように要求するだけで、サーバーはローカルホストとポートに接続する必要があります. レイアウトのTextView
真ん中に「現在接続されていません」と表示されており、ポートに接続をクリックすると「接続済み」に変わります。しかし、それは何もしていません。あちこち探してみましたが、解決策を思いつくことができませんでした。誰かが私が問題を理解するのを手伝ってくれるなら、それは大歓迎です。
私のスレッド asynctask コード: 編集: setText
doinbackground から取り出しました。ただし、setText
まだ機能していません。
public class ServerThread extends AsyncTask<String, String, String>{
TextView chatbox;
TextView amiconnected;
@Override
protected void onPreExecute(){
chatbox = (TextView) findViewById(R.id.textView2);
amiconnected = (TextView) findViewById(R.id.textView3);
PORT = Integer.parseInt(((EditText) findViewById(R.id.editText1)).getText().toString());
}
@Override
protected String doInBackground(String... arg0) {
//open socket at specified port on the local host
try {
socket = new DatagramSocket(PORT);
//listening
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
text2 = new String("Now you're connected.");
//convert received message to string
text1 = new String(buf, 0, packet.getLength());
//get client address from received packet
//client_addr = packet.getAddress();
//byte[] message = new byte[1024];
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return text2;
}
@Override
protected void onPostExecute(String text2) {
// TODO Auto-generated method stub
super.onPostExecute(text2);
chatbox.setText(text2);
}
編集:私のUDPサーバーコード全体
package com.example.udpcomm;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Server extends Activity{
int PORT;
DatagramSocket socket;
InetAddress client_addr;
String text1;
String text2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);
//chatbox = (TextView) findViewById(R.id.textView2);
Button connectButton = (Button) findViewById(R.id.connectserver);
connectButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
new ServerThread().execute();
}
});
}
//parameter string port (converted into int)
//onprogressupdate (inputting string (?) into TextView)
//on postexecute return null (?)
public class ServerThread extends AsyncTask<String, String, String>{
TextView chatbox;
TextView amiconnected;
@Override
protected void onPreExecute(){
chatbox = (TextView) findViewById(R.id.textView2);
amiconnected = (TextView) findViewById(R.id.textView3);
PORT = Integer.parseInt(((EditText) findViewById(R.id.editText1)).getText().toString());
}
@Override
protected String doInBackground(String... arg0) {
//open socket at specified port on the local host
try {
socket = new DatagramSocket(PORT);
//listening
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
text2 = new String("Now you're connected.");
//convert received message to string
text1 = new String(buf, 0, packet.getLength());
//get client address from received packet
//client_addr = packet.getAddress();
//byte[] message = new byte[1024];
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return text2;
}
@Override
protected void onPostExecute(String text2) {
// TODO Auto-generated method stub
super.onPostExecute(text2);
chatbox.setText(text2);
}
}
}