0

私はこのテーマについて多くのことを読みましたが、私を助けることができる答えを見つけることができないようです. アプリケーションをフロントエンド/バックエンドとしてモデル化しました。バックエンドは、着信接続を待機する単なるサーバーです。問題は、アプリが起動するとすぐにサーバーを起動し、サーバーと通信しなくなることです。ここで、サーバーがフロントエンドと通信して、誰かが接続したことを伝える必要があります。静的メソッドを使用してみましたが、別の広告から UI を更新できないというエラーが発生します。どうすれば続行できますか?編集:

私のサーバークラス

public class Server {
public static int uniqueID;
private final int port;
private final Boolean keepWorking;
private final String username;

public Server(int port, String username) {
    this.port = port;
    this.username = username;
    keepWorking = true;

}
public void Start() {
    try {
        ServerSocket serverSocket = new ServerSocket(port);
        while (keepWorking) {

            Socket socket = serverSocket.accept();


            MainActivity.SomeoneConnected();
        }
        serverSocket.close();

    } catch (IOException e) {
        Log.d("Error", e.getMessage().toString());

    }

}

}

それは私が必要とするすべてです。誰かが接続したことをフロントエンドに伝えるサーバー

4

3 に答える 3

1

AsyncTasks を調べる必要があります。

http://developer.android.com/reference/android/os/AsyncTask.html

またはあらゆる種類のスレッド/ハンドラーの実装。-このオンラインの例はたくさんあります

ruOnUiThread()アクティビティの方法も検討してください。

これらのソリューションはすべて、クライアント/サーバー アーキテクチャが同じアクティビティに含まれていることを前提としています。

** あなたの編集に基づく:

MainActivity.SomeoneConnected();アクティビティのインスタンスを使用して呼び出すか、Ui スレッドでハンドラーを作成し、次を使用してメソッド内からinstance.runOnUiThread()呼び出す runnable を投稿する必要があります。MainActivity.SomeoneConnected();run()handlerInstance.post(yourRunnable)

Runnable を作成する方法の例を次に示します。

AndroidでRunnableスレッドを実行するには?

于 2013-07-04T22:03:55.170 に答える
0

これを行うには、Google アプリ エンジンと Google クラウド メッセージングを使用することを強くお勧めします。これは Android を強力にサポートしており、サーバーをポーリングする必要がないことを意味します。

詳細: http://developer.android.com/google/gcm/index.html

于 2013-07-04T21:56:45.203 に答える
0

スレッド間の通信に最適なツールはHandlerです。

于 2013-07-04T22:05:31.853 に答える