2011-11-27 4 views
0

내 클래스의 코드 스 니펫입니다. alertDialog를 호출하는 방법은 다음과 같습니다. 내 경우에는 카운트는 AsyncTask를 종료하고 디스플레이 대화합니다 0 인 경우 :alertDialog를 표시하는 클래스의 주요 활동에서 asynctask를 방해 할 수 있습니까?

if(count == 0){ 

      NumberPlateActivity np = new NumberPlateActivity(); 

      np.dialog(con); 
} 

을 그리고 여기에 AsyncTask를 중단하고 대화 상자가 나타납니다하기 위해 가정 내 주요 활동으로하는 방법입니다 :

public void dialog(final Context context){ 

    new Thread() { public void run() {  
NumberPlateActivity.this.runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
     try{ 
      ImageProc stop = new ImageProc();// ImageProc - asynctask 
      stop.cancel(true); 

     } catch (Exception e) { 

      AlertDialog.Builder builder = new AlertDialog.Builder(context); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
      builder.setMessage("Plate not found. Try again!") 
        .setCancelable(false) 
         .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          Intent intent = new Intent(); 
          intent.setClass(context.getApplicationContext(), ANPR.class); 
          context.startActivity(intent); 

         } 
        }); 

     } 
    }}); 
    } 
}.start(); 
} 

코드를 실행 한 후에이 오류가 발생합니다. Looper.prepare()을 호출하지 않은 스레드 내부에서 처리기를 만들 수 없습니다. 제안 사항이 있으십니까?

답변

0

활동을 실행하는 주 스레드 안에 처리기를 작성하고 있습니다. 별도의 스레드에서 수행해야합니다.

코드에 처리기가 표시되지 않으므로 여기에 표시되지 않는 어딘가에서 사용하고있을 가능성이 큽니다.

0

당신이 당신의 AsyncTask를 종료하는 경우, 왜는 수행

void onPostExecute(...) 
{ 
    if (count == 0) 
    { 
     NumberPlateActivity np = new NumberPlateActivity(); 
     np.dialog(con); 
    } 
} 

나에게 가장 쉬운 솔루션을 보인다! 또한 ThreadRunnablepublic void dialog(final Context context)에 없앨 수 있음을 의미합니다.

public void dialog(final Context context) 방법에 관해서는, 나는 Thread 클래스를 가진를 위해 어떤 이유를보고, 할 수 없습니다

ImageProc stop = new ImageProc();// ImageProc - asynctask 
stop.cancel(true); 

은 내가 AsyncTask을 만들 수있는 명백한 이유를 볼 수 없습니다 후 즉시 삭제합니다.

관련 문제