2012-10-11 5 views
0

활동에 단추가 있습니다. 그것을 누르면 다른 활동이로드됩니다. 이 실습에서는 각 셀에 설명과 이미지가있는 사용자 정의 격자보기가 있습니다. 비동기 작업을 통해 원격 서버에서 그리드보기를 채우는 중입니다.비동기 작업 사이에 인터넷 연결이 끊어지면 활동을 유지하는 방법

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (isInternetAvailable) { 
      Intent intent = new Intent(menuActivity.this, 
        gridActivity.class); 
      startActivity(intent); 
     } 
     else { 
      MyAlertDialog.ShowAlertDialog(menuActivity.this, 
              "", 
              "No network connection", 
              "OK"); 
     } 
    } 
}); 

여기서 testAsyncTask()를 공유하고 있습니다. I 버튼을 계속 여기서 I는 제 활성의 상태를 검사하고

private void testAsyncTask() { 
    new AsyncTask<Object, Object, Object>() { 

     @Override 
     protected void onPreExecute() { 

      progress_Dialog = ProgressDialog.show(a, "", "Loading"); 
     } 

     @Override 
     protected Integer doInBackground(Object... params) { 
      try { 
       MenuService menuService = new MenuServiceImpl(); 
       MenuServiceResponse pMenu = menuService.getMenu(); 
       itemlist = pMenu.getMenu().getMenus(); 
       return 0; 
      } 
      catch (MyServiceException e) { 
       MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK"); 
       e.printStackTrace(); 
      } 
      return 0; 
     } 

     @Override 
     protected void onPostExecute(Object result) { 

      if (progress_Dialog != null) { 
       progress_Dialog.dismiss(); 
      } 

      try 
      { 
       adapter = new GridAdapter(
        GridActivity.this, itemlist); 
       AllitemgridView.setAdapter(adapter); 

      } 
      catch(Exception e) 
      { 
       adapter = null; 
       MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "Check Network Connection", "OK"); 
      } 

     } 
    }.execute(); 
} 

I는 (제 활성)의 gridActivity에서 onCreate()이 함수를 호출하고있다. 인터넷에 연결되어있는 경우에만 시작 활동을 시작하겠습니다.

내 문제는 인터넷에 연결되어 있고 버튼을 누르면 startacvitiy이 실행되고 두 번째 활동으로 이동합니다. 두 번째 활동의 onCreate()에서 testAsync()를 호출합니다. 이제로드 대화 상자가 표시되고 백그라운드에서 원격 서버에서 데이터를 가져옵니다.

모뎀을 끄면 응용 프로그램이 5-6 초 동안 멈추고 강제 종료됩니다. 그렇다면이 예외를 어떻게 처리 할 수 ​​있습니까?

doInbackgorund() 내부의 코딩은 인터넷 연결이 필요하며 Wi-Fi에서 의 연결을 끊을 때이 충돌의 원인 일 수 있습니다. 이 충돌을 어떻게 처리 할 수 ​​있습니까? 이 방법은 다른 스레드를하고 있기 때문에 당신은 doinbackground 방법이 사용할 수 없습니다

답변

1

, MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK");

에서만 onpost 방법으로 사용할 수 있습니다.

아니면 대화 메시지를 사용할 수 있습니다

@Override 
    protected Integer doInBackground(Object... params) { 
     try { 
      MenuService menuService = new MenuServiceImpl(); 
      MenuServiceResponse pMenu = menuService.getMenu(); 
      itemlist = pMenu.getMenu().getMenus(); 
      return 0; 
     } catch (MyServiceException e) { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        MyAlertDialog.ShowAlertDialog(GridActivity.this, "", "No network connection detected.", "OK"); 
       } 
      }); 
      e.printStackTrace(); 
     } 
    } 
+0

@ 피터 모텐슨은 시간 내 주셔서 감사를! – Jamshid

관련 문제