2014-07-23 8 views
2

나는 인터넷을 연결하기 위해 비동기 태스크를 사용한다. 진행 대화 상자은 onPreExecute()에 표시 할 수 있으며 해당 모바일이 온라인인지 확인하면 예를 들어 http 연결 코드가 실행됨을 의미하며 onPostExecute()와 진행중인 작업 대화 상자를 양호한 것으로 닫습니다. 인터넷 연결 전에 응답 항상 보여주는 진행률 대화를 의미 얻을 폐쇄 요청 및 연결시 사용할 수있는 경우안드로이드 AsyncTask에서 대기 인터넷 연결에 대한 시간 제한을 설정하는 방법?

는하지만 난 문제가 있습니다.

가 지금은 상호 분리는 GET 응답 전에 진행 대화 상자를 인터넷에 연결되어 있지 않음으로 저를 경고하고 해고 뜻 경우이 문제를 해결하려면 (30초에 대한 수도 세트 로딩 시간 제한).

아래 코드는 제 코드입니다.

하나가 될 수 있습니까?

public class SubjectTask extends AsyncTask<Void, Void, Integer> { 

    @Override 
    protected void onPreExecute() { 
     progressDialog = ProgressDialog.show(Login.this, "Loading", 
       "Please wait..."); 
     //checkConnection(); 

    } 

    @Override 
    protected Integer doInBackground(Void... arg0) { 

     if (isOnline()) { //using ConnectivityManager And Network Info 

      try { 

       //Http Request connections 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 



      return 1; 
     } else { 

      alert("Check your internet connection"); 
      return 0; 
     } 

    } 

    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
     } 
    } 

} 

답변

1

브로드 캐스트 리시버를 사용하여 네트워크 연결 또는 연결 끊김 이벤트를 얻을 수 있습니다. 이 수신자를 doInbackground 메소드에 등록하고 onPostExecute 메소드에서 등록 해제하십시오. 연결이 HTTP 요청 IOException 전이나 동안 폐쇄 될 경우

broadcastReceiver = new BroadcastReceiver() { 

        @Override 
        public void onReceive(Context context, Intent intent) { 

         ConnectivityManager connectivity = (ConnectivityManager) context 
           .getSystemService(Context.CONNECTIVITY_SERVICE); 


          NetworkInfo info = connectivity.getActiveNetworkInfo(); 
          //Play with the info about current network state 
          if(info.getState()== NetworkInfo.State.DISCONNECTED) { 
           // hide loader and show alert here 
} 

         } 

        } 
       }; 

       intentFilter = new IntentFilter(); 
       intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
       registerReceiver(broadcastReceiver, intentFilter); 
1

발생합니다. 예외를 잡아 거기에있는 대화 상자를 닫고이 이벤트에 대해 사용자에게 알리십시오.

if (isOnline()) { //using ConnectivityManager And Network Info 

     try { 

      //Http Request connections 

     } catch (IOException e) { 
      e.printStackTrace(); 
      // Do the error handling here 

     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } 
    } 

onPostExecute()에 대한 반환 값이 필요한지 잘 모르겠습니다. 그렇다면 논리가 예외가 발생할 수 있음을 인식하게하십시오.

0

은 내가 단순히 내가 HttpRequest.TimeOut를 통해 설정된 제한 시간이 오류를 해결해야 스티브 Benettand Bhawna Raheja, 늦게 답장을 보내 주셔서 죄송 에 감사드립니다. 나는 시간을 잊어 버리는 것을 어떻게 잊어 버렸는지 모른다.

두 분 모두 다시 한 번 감사드립니다.