2015-02-05 3 views
0

비동기 작업의 사전 실행 방법에 진행 스피너를 사용하여 UI에 표시하고 데이터가 발리 라이브러리를 사용하여 백그라운드에서 Api에서 페치를 시작합니다. 문제 데이터를 가져 오기 시작하면 로더가 회전을 멈추고 UI가 응답하지 않습니다.백그라운드에서 페치가 시작될 때 안드로이드 진행 스피너 로더가 회전을 멈 춥니 다.

도움이 필요합니다. 미리 감사드립니다. ` ProgressDialog 대화 상자;

public void open() { 
    dialog = new ProgressDialog(BuzoongaContacts.this); 
    dialog.setIndeterminate(true); 
    dialog.setCancelable(true); 
    dialog.show(); 
    dialog.setContentView(R.layout.progress_layout); 
    dialog.setCanceledOnTouchOutside(false); 
} 

public void stopLoading() { 
    Log.d("res", "stopLoading "); 
    try { 
     dialog.dismiss(); 

    } catch (Exception e) { 
     // TODO: handle exception 
    } 
}` 

비동기 작업은 :

class BuzoongaContactsAsync extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       open(); 
      } 
     }); 


    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     ContactsDataTableOperations conDataTab = new ContactsDataTableOperations(BuzoongaContacts.this); 
     conDataTab.open(); 
     JSONParsingForContactsB.count = 0; 
     count = 0; 

     if (fromRefresh) 
     { 
      if (isInternetConnected()) { 
       getBuzzongaContacts(); 
      } else { 
       rl_sub_main_buzoongaContacts.startAnimation(animZoomOut); 
       alertDialog("Network Error !",getResources().getString(R.string.network_error)); 
       rl_alert.startAnimation(animMoveUp); 
      } 
     } else 
     { 
      if (getContactsExistence() == 0) { 
       if (isInternetConnected()) { 
        getBuzzongaContacts(); 
       } else { 
        rl_sub_main_buzoongaContacts.startAnimation(animZoomOut); 
        alertDialog("Network Error !", getResources().getString(R.string.network_error)); 
        rl_alert.startAnimation(animMoveUp); 
       } 
      } else if (Constants.buzoongaContactsAdded) 
      { 
       if (isInternetConnected()) { 
        getBuzzongaContacts(); 
       } else { 
        rl_sub_main_buzoongaContacts.startAnimation(animZoomOut); 
        alertDialog("Network Error !", getResources().getString(R.string.network_error)); 
        rl_alert.startAnimation(animMoveUp); 
       } 
      } else { 
       stopLoading(); 

      } 
     } 
     arr_list = conDataTab.getAllRecords(); 
     conDataTab.close(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     cb_select_all.setChecked(false); 
     iv_quick_launch.setBackgroundResource(R.drawable.quick_lounch_icon_disable); 
     Constants.selected_buzoonga_contacts = 0; 
     rl_delete.setAlpha(0.5f); 
     rl_delete.setClickable(false); 
     rl_show_contacts.setVisibility(View.INVISIBLE); 
     mAdapter.notifyDataSetChanged(); 
    } 
} 
+1

'doInBackground' 및'onPostExecute' 메소드 코드 표시 –

+1

전체 AsyncTask를 게시하십시오. – Skynet

+0

getBuzoongaContacs(); 발리 라이브러리를 사용하여 데이터를 가져 오는 방법입니다. –

답변

0

기본적으로, 당신은 startAnimation() 또는 stopLoading 모든 통화가 runOnUiThread로 포장되어야 함을 의미하는 백그라운드 스레드에서 UI 요소를 만지지 수 있습니다.

하지만 UI 코드가 배경 코드와 너무 밀접하다는 것을 알 수 있습니다. 아마도 Thread & Handler 대신 AsyncTask을 사용하는 것이 좋습니다.

+0

@ songchenwen..that는 괜찮습니다 ...하지만 사전에 내 로더를 호출하고 게시물에서 멈추는 중입니다 ... 백그라운드에서 UI 요소를 사용하면 로더가 변경됩니다 ??? –

+0

@asifahmed 귀하의 앱이 응답하지 않는 것으로 언급 했으므로 귀하는 귀하의 UI 코드에서 배경 코드를 실행 한 것으로 의심됩니다. 어쩌면 여기서 비동기 작업을 시작하는 코드를 여기에 넣을 수 있습니다. – songchenwen

+0

@songchenwen ... 내 말은, 로더의 회전에 멈추면 UI가 응답하지 않는 것처럼 보입니다. 회전자가 끝나면 인출이 멈 춥니 다 (stopLoading) ... –