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;无论什么时候发现游戏,它都很奇怪......
答案 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();
}
}