2014-10-16 2 views
-1

я запускаю AsyncTask в mainActivity [Get_IO()]:Как добавить AsyncTask Timeout в этот код?

// Rafraichissmeent de l'activity 
    refresh = new Runnable() { 
     public void run() { 
      // Do something 
      new Get_IO().execute(); 
      handler.postDelayed(refresh, 10000); 
     } 
    }; 
    handler.post(refresh); 

Но из-за не имеющие хорошее качество связи, задача по-прежнему ждет, я хочу добавить тайм-аут, но как? Я попытался добавить еще одну задачу, чтобы сделать тайм-аут, но, к сожалению, она не работает.

Вот Get_IO (код):

public class Get_IO extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     //Handler mHandler = new Handler(); 
     //Runnable runnable = new Runnable() { 
     // @Override 
     // public void run() { 
     //  if (mAT.getStatus() == Status.RUNNING || mAT.getStatus() == Status.PENDING) { 
     //   mAT.cancel(true); //Cancel Async task or do the operation you want after 1 minute 
     //  } 
     // } 
     //}; 
     //mHandler.postDelayed(runnable, 60000); 

     // Showing progress dialog 
     pDialog = new ProgressDialog(PortailActivity.this); 
     pDialog.setMessage("Please wait..."); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     // Creating service handler class instance 
     ServiceHandler sh = new ServiceHandler(); 

     // Making a request to url and getting response 
     String jsonStr = sh.makeServiceCall(url_status, ServiceHandler.GET); 

     Log.d("Response: ", "> " + jsonStr); 

     if (jsonStr != null) { 
      try { 
       JSONObject jsonObj = new JSONObject(jsonStr); 

       string_input = jsonObj.getString(TAG_INPUT); 
       string_output = jsonObj.getString(TAG_OUTPUT); 

       // tmp hashmap for single contact 
       HashMap<String, String> iostatus = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       iostatus.put(TAG_INPUT, string_input); 
       iostatus.put(TAG_OUTPUT, string_output); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Log.e("ServiceHandler", "Couldn't get any data from the url"); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     // Dismiss the progress dialog 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 

     TextView lblMobile = (TextView) findViewById(R.id.mobile_label); 
     lblMobile.setText(string_input.concat(" - ") .concat(string_output)); 
     check_etat_portail(); 
    } 
} 

Я не понимаю, вещь очень хорошо;)

ответ

0

Если вы хотите, чтобы начать новую деятельность, когда makeServiceCall() выполняется, вы должны сделать это в onPostExecute() с чеком, если makeServiceCall() был подозрительным. И если вы хотите сократить сетевой тайм-аут, вы должны установить его для своего HTTP-запроса (так что в основном по крайней мере в makeServiceCall() или даже ниже, в зависимости от вашего приложения strcuture.

Смежные вопросы