2011-11-17 2 views
0

아래 코드는 내 사용자를 인증하는 진행률 대화 상자를 표시합니다. 나는 사용자 ID 나 암호가 일치하지 않을 때, (응답 코드가 아닙니다 200) 을 토스트 메시지를 표시하려면하지만 난토스트 메시지가 표시되지 않고 경고 메시지가 표시됨 : 포커스가있는 창을 이미 무시한 채로 있음 : com.android.internal.view

코드

를 표시하지 않습니다 경고

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(); 
     } 
    } 

답변

0

백그라운드에서 코드를 실행 중이므로 토스트가 작동하지 않는다고 생각합니다. 백그라운드 스레드가 아닌 UI 스레드에서 토스트를 작성해야합니다.이 스레드는 UI를 업데이트 할 수 없으므로 광고 .. AsyncTask를 스레딩에 사용하는 것이 좋습니다. 매우 깨끗하고 사용하기 쉽습니다.

+0

까지 내가 백그라운드에서 실행중인 코드는 백그라운드에서 실행 중입니다. 토스트를 표시하고 싶습니다 ... 비동기 작업을 사용하여 문제가 해결 될 수 있다면 제 예제를 주시겠습니까, 아니면 내 게시물을 편집하십시오. – Romi

0

범위 getApplicationcontext를 'this'또는 'ActivityName.class'로 지정하고 확인하십시오. 확인하지 않았지만 작동하지 않을 수 있습니다.

+0

이 또는 ActivityName.class 오류가 발생하면 ActivityName.this를 사용했지만 작동하지 않았습니다. – Romi

2

갖고 싶은 토스트, 대화 상자 변경 사항은 다른 스레드에서 가질 수 없습니다. 기본 UI 스레드에서이 작업을 수행해야합니다. 당신을위한 쉬운 방법은 많은 변화를 만들어야 할 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의 핸들러.

+0

vikky : 코드 progressDialog가 계속 실행되면이 실행이 실행되지 않음을 의미합니다. 내가 그것을 작성했습니다 (client.response! = 200) { – Romi

+0

ok. Handler와 같은 액티비티에서 핸들러의 인스턴스를 생성합니다. handler = new Handler(); – vikky

+0

여전히 로그에 경고가 표시되지만 나중에 표시됩니다. :) – Romi

관련 문제