0

サーバーコンピューターとAndroidスマートフォン間の通信システムを作成しようとしています。私はついに、仕事の良い結果を得ています。ただし、Android ビューに問題があります。具体的には、拡張子のないクラスからテキストビューのメソッド「.setText()」を使用しようとしています。そのクラスに textview オブジェクトを渡しましたが、メソッド "textview.setText()" は問題なく動作し、UI にも影響しません。コードを下に置くと、より明確に理解し、コードを試す機会が得られると思います。

public class NetworkingActivity extends Activity {

    public static String message;
    public static EditText editext;
    public static TextView textview;
    private Connector connector;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }


    public void buttonClicked(View v){
        editext = (EditText) findViewById(R.id.editText1);
        textview = (TextView) findViewById(R.id.textview);
        message = editext.getText().toString();

        connector = new Connector(NetworkingActivity.this);
        connector.start();

    }

    public void yenile(String respond){
        textview.setText(respond);
        editext.setText("");

    }

    public void yenileClicked(View v){
        textview.setText(Connector.respond);
        editext.setText("");

    }

    public static class Connector extends Thread{
        private static final int PORT = 3588;
        private static final String IpAddress = "XXX.XXX.XXX.XXX"; // of course X's have a int value
        public static String respond;
        private NetworkingActivity activity;

        public Connector(NetworkingActivity activity){
            this.activity = activity;
        }

        public void run() {

            try {

                Socket socket = new Socket(IpAddress, PORT);

                PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
                Scanner scanner = new Scanner(socket.getInputStream());

                writer.println(NetworkingActivity.message);
                respond = scanner.nextLine();


                activity.yenile(respond);

                socket.close();
            } catch (Exception e) {

            }

        }

    }
}

最後に、もう 1 つお伝えしなければなりません。メソッド YenileClicked() は、ボタンを介して " android:onClick="yenileClicked" " である xml ファイル内のコードによって割り当てられます。問題は、他のクラスがほぼ同じ方法である Yenile(); を続行できないことです。

4

1 に答える 1

0

次のいずれかを使用できます。

  1. runOnUiThreadを使用します。

  2. Handler.postを使用する

  3. あなたの場合はおそらく最も簡単です:textview.postを使用してください

  4. ここには完全には適合しませんが、同様のタスクにも適している可能性があります。asycnTaskを使用してください。

于 2012-06-13T22:41:49.080 に答える