0

アプリケーションオブジェクトとしてソケットを作成しようとしています。アクティビティのコードは次のとおりです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = getApplicationContext();
    setContentView(R.layout.activity_connect);
    app = (MyApplication) getApplication();
    connectButton = (ImageButton) findViewById(R.id.connect_button);
    connectButton.setOnClickListener(connectListener);
    //app.stablishConnection();

}

private OnClickListener connectListener = new OnClickListener() {

    @Override
    public void onClick(View v) {

         app.stablishConnection();  
         Intent intent = new Intent(context, ShowDetails.class);
         startActivity(intent);
    }
};

そして、これがApplicationクラスのコードです

private Socket socket;
Context context;

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

@Override
public void onCreate() {
    super.onCreate();
    context = getApplicationContext();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
}

@Override
public void onTerminate() {
    super.onTerminate();
}

public void stablishConnection(){
    try {   InetAddress serverAddr;
        serverAddr = InetAddress.getByName("10.10.10.10");
        socket = new Socket(serverAddr, 5000);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

アプリケーションが閉じられるまでソケットが破壊されないようにし、ユーザーがボタンをクリックしたらソケットを作成したいと思います。

アクティビティがを呼び出すと、システムはandroidblockguardpolicy例外を表示しますapp.stablishConnection()。また、onCreateでこのメソッドを呼び出そうとしました(コメントが表示されています)。その場合、アプリsocket = new Socket(serverAddr, 5000);がアプリケーションクラスにソケットを作成しようとすると、componentInfo例外を開始できませんと表示されます。

どうすればこれを修正できますか?

4

1 に答える 1

1

アプリケーションのメイン/UIスレッドでネットワーク操作を実行しないでください。サービスを作成したり、バックグラウンドスレッド/非同期タスクを使用して必要なネットワークIOを実行したりするためのチュートリアルはたくさんあります。

于 2013-02-26T17:19:08.460 に答える