Сообщение тоста не отображается, появляется предупреждение: окно уже сфокусировано, игнорируя усиление фокуса: com.android.internal.view - PullRequest
0 голосов
/ 17 ноября 2011

Ниже приведен мой код, который отображает диалоговое окно прогресса для аутентификации пользователя. Я хочу отобразить сообщение Toast, когда ID пользователя или пароль не совпадают (код ответа не 200) но я получаю предупреждение

WARN/InputManagerService(58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy 

и сообщение тост не отображается

код

new Thread() {
        public void run() {
            Looper.prepare();
                try {
                    performBackgroundProcess();
                    } catch (Exception e) {
                    Log.e("tag", e.getMessage());
                    }
                }
                }.start();



    private void performBackgroundProcess() {
        String sUserName = usernameEditText.getText().toString();
        String sPassword = String authentication = sUserName + ":" + sPassword;
        String login = Base64.encodeToString(authentication.getBytes(),
                            Base64.NO_WRAP);
        Resources res = getResources();
        String URLLogin = res.getString(R.string.URLlogin);
        RestClient client = new RestClient(URLLogin, login);
        try {
            client.Execute(RequestMethod.POST);
            } catch (Exception e) {
            e.printStackTrace();
            }
        if (client.getResponseCode() != 200) {
            progressDialog.dismiss();
            Toast.makeText(getApplicationContext(),"Username or Password does not match",Toast.LENGTH_SHORT).show();
        } 
    }

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

Посмотрите, какие изменения пользовательского интерфейса, тост, диалоговое окно вы хотите иметь, вы не можете иметь в другом потоке.Вы должны сделать это в основном потоке пользовательского интерфейса.Простой способ сделать это правильно - использовать обработчик, поскольку при использовании aync теперь придется вносить много изменений.

  new Handler().post( new Runnable() {
                  public void run() {
                        progressDialog.dismiss();
        Toast.makeText(getApplicationContext(),"Username or Password does not match",Toast.LENGTH_SHORT).show();
                  }
          });

    } 

Обработчик android.os, а не java здесь.

0 голосов
/ 17 ноября 2011

Вместо того, чтобы задавать область действия getApplicationcontext, задайте его как «this» или «ActivityName.class» и проверьте. Не проверял, но может работать.

0 голосов
/ 17 ноября 2011

Я думаю, что вы выполняете код в фоновом режиме, поэтому там не будет работать Toast, вы должны написать Toast в потоке пользовательского интерфейса, а не в фоновом режиме .. потому что этот поток не может обновить поток в пользовательском интерфейсе .. Я предлагаю вам использовать AsyncTask для создания потоков очень чистыйи простой в использовании

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...