2016-07-29 5 views
0

지연 후 내 안드로이드 앱에 대화 상자가 표시되어야합니다. 문제는 대화 상자가 표시 될 때까지 상황이 변경되었을 수 있다는 것입니다.다른 컨텍스트에서 대화 상자를 표시하려면 어떻게해야합니까?

이 문제를 어떻게 해결할 수 있습니까?

내 코드는 지금과 같습니다

class UpdateRunnable extends Runnable { 
    private Context ctx; 
    UpdateRunnable(Context ctx) { 
     this.ctx = ctx 
    } 
    @Override 
    public void run() { 
     //throws exception: "Unable to add window -- token null is not for an application" 
     AlertDialog.Builder builder = new AlertDialog.Builder(ctx.getApplicationContext()); 
     builder.setTitle("Time to refresh data"); 
     builder.setMessage("Data needs updating"); 
     builder.show(); 
    } 
} 

class MyAvtivity extends AppCompatActivity { 
    @override 
    public void onCreate(...) { 
     Handler updateHandler = new Handler(); 
     updateHandler.postDelayed(new UpdateRunnable(this), 10000); 

     //do some stuff 
     //start another activity 
    } 
} 

답변

1

에 AlertDialog.Builder는 ApplicationContext를 작동하지 않습니다. 그래서 나쁜 토큰 예외가 발생합니다.

실행 파일의 컨텍스트가 현재 활동 컨텍스트인지 확인하거나, 대화 상자를 표시 할 논리를 가진 서비스를 사용하는 것과 같은 다른 aproach를 시도하고 현재 활동을 알리도록해야합니다 AlertDialog를 사용하는 대신 Dialog.Theme을 사용하여 대화 상자를 표시하거나 서비스를 사용하여 활동을 시작해야합니다.

0
private Context ctx; 
UpdateRunnable(Activity activity) { this.activity = activity } 

@Override public void run() { 
    if(!activity.isFinishing()){ 
     AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
     builder.setTitle("Time to refresh data"); 
     builder.setMessage("Data needs updating"); 
     builder.show(); 
    } 
} 
+0

이것은 예외를 발생시키지 않지만 더 이상 보이지 않는 활동에 표시하려고하므로 대화 상자를 표시하지 않고 나중에 창이 누설됩니다. – B1CL0PS