2012-06-20 6 views
0

사용자가 선택하는 버튼이 있으며 일부 데이터를 대체하기 위해 AlertDialog를 팝업으로 표시하거나 취소 또는 취소 할 수 있습니다. OK와 CANCEL은 ASYNCH 프로세스를 찾은 후에 잘 작동합니다. 그리고 여러 번의 클릭을 중지합니다. 그러나 사용자가 OK를 누르면 몇 가지 작업과 함께 정보를 메모리에 저장해야합니다. OK 프로세스에는 약 3 초가 걸리며, 이는 참을성없는 사람들의 경계를 넘습니다. 나는 메시지로 불확정 진행 바를 던지고 싶다. 그러나 자바와 안드로이드에 대한 나의 새로운 점이 점점 커지고 있습니다. 아래 코드의 '컨텍스트'는 무엇입니까?ProgressDialog 문제

public void getData(final View v) 
{ 
    if(AlertDialogProcessing==0) 
    { 
     final String title="Set Image to Wallpaper"; 
     final String message="Press OK to set as Wallpaper or CANCEL"; 
     final String ok="OK"; 
     final String cancel="CANCEL"; 
     final AlertDialog.Builder alertbox = new AlertDialog.Builder(this); 
     try{ 
       alertbox.setMessage(message); 
       alertbox.setTitle(title); 
       alertbox.setPositiveButton(ok,new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface arg0, int arg1) 
        { 
         Vibrate(ClickVibrate); 
         Drawable drawable= getSun(imageSelect); 
         ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please wait...", true); //<<<<<<<<<<ERROR at context 
         AlertDialogProcessing=1;  
         SaveData(drawable,1); 
         AlertDialogProcessing=0; 
         dialog.dismiss(); 
         Toast.makeText(getApplicationContext(), "Data Saved.",Toast.LENGTH_LONG).show();  
        } 
       }); 

       alertbox.setNegativeButton(cancel,new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface arg0, int arg1){ 
         AlertDialogProcessing=0; 
         Vibrate(ClickVibrate); 
        } 
       }); 
       //alertbox.setCanceledOnTouchOutside(false); // maybe a 4.0 problem 
       alertbox.show(); 
     } catch(Exception e){ 
       //TODO Handle BadTokenException.  
     } 
    } 
} 

답변

1

onClick()에서 progressDialog를 만들고 UI 스레드에서 saveData() 활동을 수행하고 있습니다. 당신이 할 수있는 일은 OnClick()AsyncTask을 만들고 그 onPreExecute()에 대화 상자를 표시하고, 저장 작업을 doInBackground()에 수행하고 onPostExecute()에서 대화 상자를 닫습니다.

컨텍스트의 정의는 (안드로이드 개발자 사이트에 따라)입니다 : 응용 프로그램 환경에 대한 글로벌 정보에

인터페이스. 이것은 구현이 Android 시스템에서 제공되는 추상 클래스입니다. 또한, 응용 프로그램 별 자원과 클래스에 액세스 할 수 있습니다뿐만 아니라 최대 - 전화

는 설명이 도움이되기를 바랍니다 등 발사 활동, 방송 수신 의도로 응용 프로그램 수준의 작업.

+0

Android에는 프로그래머가 지시 할 수있는 하이퍼 바이저가 필요합니다. – user1445716

+0

Android에 프로그래머가 때로는 지시를 내릴 수있는 하이퍼 바이저가 필요합니다. 나는 병렬 프로그래밍과 스레드 프로그래밍을 수행했으며 비동기식은 두 가지와 두 가지가 결합 된 것으로 보인다. 3 초의 벌금으로 데이터를 저장하겠다는 나의 관심은 내가 무언가에게 넘겨 준 임의의 사람들에 의해 발견되지 않는다는 것이 밝혀졌습니다. 파일 다운로드를 위해 도구 상자에 asynch를 추가해야합니다. 나는 실제로 구글 안드로이드 예제가없는 도움이 덜 도움이 발견했습니다. 노력에 감사드립니다. – user1445716

0

여기 상황은 진행 상황을 호출 활동의 문맥이 YourActivity.this이

1

당신이 얻는 상황과 문제에 직면하는 경우, 당신은 단순히 대체 할 수 있어야한다 dialog.So입니다

ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please 
    wait...", true); 

여기서

ProgressDialog dialog = ProgressDialog.show(v.getRootView().getContext(), "Loading", "Please 
    wait...", true); 

, v.getRootView()는 getContext().; getData() 메소드에서 전달 된 View Object의 컨텍스트를 참조합니다.

+0

'v'를 final로 설정해야합니다. – user1445716

+0

에서 'v'를 final로 설정해야합니다. progressDialog가 해제되기 때문에 결코 표시되지 않습니다. 그래도 여전히 문제. 문제는 OK를 강조 표시 한 상태로 유지하는 것입니다. 확인/취소 알림이 사라지고 저장이 완료되었다는 메시지가 나타납니다. 여전히 Ok/Cancel에 3-4 초 지연이 걸립니다. progressdialog가 닫히는 것을 주석 처리하면 progressdialog가 실행됩니다 (물론로드 대기 중). 그래서 그것의 비동기는 데이터를 저장 한 후에 처리하게하고 그것을 보여주지 않고 해산됩니다. 도움이 필요 하신가요? – user1445716