0

クライアントからの着信接続を受け入れるサーバーソケットを持つクラスを作成しました。クライアントが接続されたときにボタンを表示する必要があります。どうすればできますか?イベントリスナーを実装する必要がありますか? これはサーバークラスです:

public class MyServer implements Runnable {

    public int serverPort = 8080;
    public String serverIp = "http://192.168.1.115";
    public Handler handler = new Handler();
    public TextView serverStatus;
    public ServerSocket serverSocket;
    MyServerMethods myServerMethods = new MyServerMethods();

    @Override
    public void run() {
        try{
          ServerSocket parent = new ServerSocket(); //create a new socket
          parent.setReuseAddress(true);
          parent.bind(new InetSocketAddress(serverPort)); //bind the server port and reuse it if necessary
            if ( serverIp != null){
                Log.i("Status","READY");
                while (true){
                    Socket client = parent.accept(); //accept the incoming connection
                        try{
                            String path = myServerMethods.readRequest(parent, client);
                            Log.i("PATH",""+path);
                            if (path.contains("FitListXml")){
                                myServerMethods.sendXmlFile(client);
                            } else {
                                myServerMethods.sendPhotoFile(client, path);
                            }

                        } catch (Exception e){
                            e.printStackTrace();
                        }
                    }
            } else{
                Log.i("Error","Internet connection not present");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

これは、ボタンを宣言した主なアクティビティです (質問の不要な要素を削除しました)。

public class AndroidServer2 extends Activity {

private Button closeConnectionButton;
int serverPort = 8080;
Thread fst = new Thread(new MyServer()); //declaration of a new thread

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_android_server2);
}

@Override
protected void onResume(){
    super.onResume();
    if (fst.isAlive() == false){
        fst.start();
    }
}

@Override
  protected void onPause() {
    super.onPause();
    try {
        fst.interrupt();
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

}

ありがとう

4

2 に答える 2

1

runOnUiThreadアクティビティのメソッドを使用して、ボタンの可視性を設定できます。

public class MyServer implements Runnable {

public int serverPort = 8080;
public String serverIp = "http://192.168.1.115";
public Handler handler = new Handler();
public TextView serverStatus;
public ServerSocket serverSocket;
MyServerMethods myServerMethods = new MyServerMethods();

private AndroidServer2 mActivity;

MyServer(AndroidServer2 activity) {
    mActivity = activity;
}

@Override
public void run() {
    try{
      ServerSocket parent = new ServerSocket(); //create a new socket
      parent.setReuseAddress(true);
      parent.bind(new InetSocketAddress(serverPort)); //bind the server port and reuse it if necessary
        if ( serverIp != null){
            Log.i("Status","READY");
            while (true){
                Socket client = parent.accept(); //accept the incoming connection

                // Client connected now set the button visibilty
                mActivity.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        mActivity.setButtonVisible();
                    }
                });

                try{
                    String path = myServerMethods.readRequest(parent, client);
                    Log.i("PATH",""+path);
                    if (path.contains("FitListXml")){
                        myServerMethods.sendXmlFile(client);
                    } else {
                        myServerMethods.sendPhotoFile(client, path);
                    }

                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        } else{
            Log.i("Error","Internet connection not present");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

AndroidServer2 クラス:

public class AndroidServer2 extends Activity {

    private Button closeConnectionButton;
    int serverPort = 8080;
    Thread fst = new Thread(new MyServer(this)); //declaration of a new thread

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_android_server2);
    }

    @Override
    protected void onResume(){
        super.onResume();
        if (fst.isAlive() == false){
            fst.start();
        }
    }

    @Override
      protected void onPause() {
        super.onPause();
        try {
            fst.interrupt();
        } catch (Exception e) {
            e.printStackTrace();
        }
      }

    public void setButtonVisible() {
        closeConnectionButton.setVisibility(View.VISIBLE);
    }
}
于 2013-07-17T06:52:56.597 に答える
0

ボタンをメイン スレッドのレイアウトに追加すると、次のようにボタンの表示を変更できます。

closeConnectionButton.post(
   new Runnable() {
      closeConnectionButton.setVisibility(View.VISIBLE);
   }
)
于 2013-07-16T15:49:38.947 に答える