2014-09-10 3 views
-1

내 코드에서 경도와 위도 값을 확인하고 싶습니다. 값이 비어 있으면 코드는 15 초 동안 확인합니다. 값이 수신되면 루프가 중단되어 "You win"이 표시됩니다. 여전히 비어있는 경우 15 초 후에 "gps 오류"가 표시됩니다. 문제는 코드가 완벽하게 대기하고 있지만 대기 시간 동안 화면이 멈추었 기 때문에 진행 표시 줄이 화면에 표시되지 않는 것입니다. 15 초 후 화면이 비어 있습니다. 이 문제를 해결하는 방법을 알려주십시오. 감사합니다JAVA/Android를 사용하여 루프에서 X 시간 기다림

  @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getBaseContext(), longitude.getText(), Toast.LENGTH_LONG).show(); 
       Toast.makeText(getBaseContext(), latitude.getText(), Toast.LENGTH_LONG).show(); 
       pBar = new ProgressDialog(oproprietor.this); 
       pBar.setCanceledOnTouchOutside(false); 
       pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
       pBar.setMessage("Waiting 15 seconds"); 
       pBar.show(); 

       long t= System.currentTimeMillis(); 
       long end = t+15000; 
       while(System.currentTimeMillis() < end) { 


         if(!longitude.getText().equals("") || !latitude.getText().equals("")){ 

          pBar.dismiss(); 
           break; 
           } 
         else continue; 


       } 
       if(longitude.getText().equals("") || latitude.getText().equals("")){ 

          pBar.dismiss(); 
         Toast.makeText(oproprietor.this, "Error in gps", Toast.LENGTH_LONG).show(); 



         } 
       else if(!longitude.getText().equals("") || !latitude.getText().equals("")){ 

        pBar.dismiss(); 
        Toast.makeText(oproprietor.this, "You win", Toast.LENGTH_LONG).show(); 
         } 
      } 

     }); 
+0

IDE가 생성하는'/ TODO 자동 생성 메소드 스텁'코멘트에 대해 사람들이 생각하는 것이 정말 궁금합니다. 그들이 그것을 꺼내면 코드가 깨질 까봐 두려운가? 그들은 그것을 보지 못했습니까? –

+0

필자는 개인적으로 코드가 훨씬 깨끗해 보이지만 내 생각에는 그럴듯하다고 느낍니다. –

답변

0

스레드에서 실행 해보십시오.

// 참고 : ProgressDialog 진행률을 클래스의 필드로 선언하십시오. 이 이후

progress = ProgressDialog.show(this, "dialog title", 
    "dialog message", true); 

new Thread(new Runnable() { 
    @Override 
    public void run() 
    { 
    // do the thing that takes a long time 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() 
     { 
     progress.dismiss(); 
     } 
    }); 
    } 
}).start(); 
+0

while 루프와 break 또는 IF 문이 될 곳은 어디입니까? 내 코드에서 편집 해 주실 수 있습니까? – user3118495

+1

'// 오랜 시간이 걸리므로'이 주석을 루프와 바꾸십시오. – Ben

2

내가 확실히 스레드를 통해 AsyncTask를 사용하는 것이 좋습니다 것, 안드로이드입니다. This question에 안전하게이 작업을 수행하는 방법에 대한 모든 관련 세부 정보가 나와 있습니다. Java 스레드/Runnable을 사용하면 외부 스레드에서 UI 스레드와 상호 작용할 때 안드로이드에 몇 가지 UI 문제가 발생합니다.

관련 문제