Я прочитал некоторые темы по этому поводу, и я уже предпринял шаги для его решения.
Я использую обработчик (чтобы не обновлять пользовательский интерфейс в отдельном потоке) и до сих пор не могу понять, почему это все еще происходит.
public class MyApp extends Activity implements OnClickListener, Runnable {
private ViewSwitcher switcher;
private static final int REFRESH_SCREEN = 1;
private boolean isValid = false;
private ProgressDialog dialog;
private TextView errorMessage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
TextView errorMessage = (TextView)findViewById(R.id.txtErrorMessage);
errorMessage.setVisibility(View.GONE);
switcher = (ViewSwitcher) findViewById(R.id.profileSwitcher);
}
public void onClick(View v)
{
isValid = false;
dialog = ProgressDialog.show(ConcentraApp.this, "", "Loading. Please wait...", true);
Thread thread = new Thread(this);
thread.start();
}
public void run() {
String username = ((TextView)findViewById(R.id.txtUsername)).getText().toString();
String password = ((TextView)findViewById(R.id.txtPassword)).getText().toString();
errorMessage = (TextView)findViewById(R.id.txtErrorMessage);
errorMessage.setVisibility(View.GONE);
/* ... contact web service and get response ..*/
try {
/* get result from web service */
isValid = Boolean.parseBoolean(result);
if(isValid)
{
handler.sendEmptyMessage(1);
}
else
{
handler.sendEmptyMessage(0);
}
} catch (Exception e) {
handler.sendEmptyMessage(2);
isValid = false;
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == 1)
{
errorMessage.setVisibility(View.VISIBLE);
errorMessage.setText("Correct login");
switcher.showNext();
}
else if(msg.what == 0)
{
errorMessage.setVisibility(View.VISIBLE);
errorMessage.setText("Invalid login");
}
else
{
errorMessage.setVisibility(View.VISIBLE);
errorMessage.setText("Internet error");
}
dialog.dismiss();
}
};
}
Я очень новичок в этом, поэтому я не удивлюсь, если упущу что-то очевидное.
Он отлично работает без потока, но тогда диалоговое окно процесса не отображается.
Большое спасибо заранее