setText什么都不做

时间:2015-05-06 15:13:49

标签: android android-button

public class gameHomeScreen extends Activity implements View.OnClickListener{

    public static Socket socket;
    private Button button;
    private PrintWriter printwriter;
    private BufferedReader bufferedReader;
    String serverReply = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_game_home_screen);
        if(login.client!=null){
            socket = login.client;
        }else if(signup.client!=null){
            socket = signup.client;
        }
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }



    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
    }

    public void onBackPressed() {
        moveTaskToBack(true);
    }
    @Override
    public void onClick(View v) {
        button.setText("Waiting...");
        SendMessage sm = new SendMessage();
        sm.execute();
        while(!serverReply.equals("game_found")) {
            //do nothing
        }
        Intent i = new Intent(this, InGame.class);
        startActivity(i);
        finish();


    }
    private class SendMessage extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            try {
                printwriter = new PrintWriter(socket.getOutputStream(), true);
                printwriter.println("game_queue"); // write the message to output stream

                InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
                bufferedReader = new BufferedReader(inputStreamReader);
                do {
                    serverReply = bufferedReader.readLine();
                }while(!serverReply.equals("game_found"));


            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }


        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);

        }
    }
}

这行代码不起作用:

button.setText("Waiting...");

我尝试过使用处理程序并使用UIThread,但没有任何效果。该文本仅在半秒内改变为等待...&#34;无论什么时候发现游戏,它都很奇怪......

2 个答案:

答案 0 :(得分:2)

您正在挂起UI线程:

    while(!serverReply.equals("game_found")) {
        //do nothing
    }

不要在onClick方法上执行此操作。从UI线程调用此方法,然后将其锁定(这也可能会给你一个ANR)。

答案 1 :(得分:1)

onClick删除循环:

@Override
public void onClick(View v) {
    button.setText("Waiting...");
    SendMessage sm = new SendMessage();
    sm.execute();
    //while(!serverReply.equals("game_found")) {
    //    do nothing
    //}
    //Intent i = new Intent(this, InGame.class);
    //startActivity(i);
    //finish();
}

AsyncTask

中启动意图
private class SendMessage extends AsyncTask<Void, Void, Void> {

    // ...

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        Intent i = new Intent(this, InGame.class);
        startActivity(i);
        finish();
    }
}