2013-12-24 5 views
-5

Как использовать Asyntask в Android Я хочу использовать его для фонового процесса, как вызов Webservice.Как использовать AsynTask в Android?

Пожалуйста, у кого-нибудь есть идея, чем, пожалуйста, скажите мне.

Спасибо заранее.

+0

возможно дубликат [Как пользоваться AsyncTask правильно? - Android] (http://stackoverflow.com/questions/14250989/how-to-use-asynctask-correctly- андроид) – Avijit

ответ

1
Use This 
======= 
private class SetDataOfWebService extends AsyncTask<Void, Void, Boolean> { 
     // ProgressDialog pDialog; 
     boolean success = false; 
     ConnectivityManager connectivity; 

     @Override 
     protected void onPreExecute() { 
      // pDialog = new ProgressDialog(MailSettings.this); 
      // pDialog.setMessage("Please Wait.."); 
      // pDialog.show(); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      if (isNetworkAvailable()) { 
       success = true; 
       //Call WebService 

      } else { 
       success = false; 
      } 
      return success; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      // if (pDialog != null && pDialog.isShowing()) 
      // pDialog.dismiss(); 
      if (result) { 

      //Write Code For PostExcutive 
      } else { 
       return; 
      } 

     } 

     public boolean isNetworkAvailable() { 
      connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

      if (connectivity != null) { 
       NetworkInfo[] info = connectivity.getAllNetworkInfo(); 

       if (info != null) { 
        for (int i = 0; i < info.length; i++) { 
         Log.i("Class", info[i].getState().toString()); 
         if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
          return true; 
         } 
        } 
       } 
      } 
      return false; 
     } 

    } 
1

Написание AsyncTask так и не забывайте, что всегда делают задачу, которая относится к UI в onPreExecute() и onPostExecute() method.The задача, которая является вебсервис вызов или операции БД или независимо от того, что вы хотите выполнить в differen thread, должен быть в doInBackground().

class CallWebservice extends AsyncTask<Double, Void, Boolean> { 
    ProgressDialog progressDialog; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(StudentListActivity.this, 
       "Calling Webservice", "Please wait...", true); 
    } 

    @Override 
    protected Boolean doInBackground(Double... params) { 
     // TODO Auto-generated method stub 

     String response = null; 

      response = Utillity 
        .getData(WEBSERVICE_URL); 
          return null; 

    } 

    @Override 
    protected void onPostExecute(Boolean flag) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(flag); 
     progressDialog.dismiss(); 
    } 
} 

И создать вспомогательный класс, который, имеющий метод для протокола HTTPS, как это: -

Class Utility{ 
public static String getData(String url) { 
    // Create a new HttpClient and Post Header 

    HttpParams myParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(myParams, 10000); 
    HttpConnectionParams.setSoTimeout(myParams, 10000); 
    HttpClient httpclient = new DefaultHttpClient(); 
    String temp = ""; 

    try { 

     HttpGet httpGet = new HttpGet(url.toLowerCase().replace(' ', '+')); 

     HttpResponse response = httpclient.execute(httpGet); 
     temp = EntityUtils.toString(response.getEntity()); 
     Log.i("tag", temp); 

    } catch (ClientProtocolException e) { 

    } catch (IOException e) { 
    } 
    return temp; 
} 
    } 

И для получения дополнительной информации о AsyncTask пожалуйста, посетите официальный сайт http://developer.android.com/reference/android/os/AsyncTask.html

0

Здесь хороший tutorial.

Короче говоря, в некоторых случаях может продлить AsyncTask:

private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
     String response = ""; 
     for (String url : urls) { 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     try { 
      HttpResponse execute = client.execute(httpGet); 
      InputStream content = execute.getEntity().getContent(); 

      BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
      String s = ""; 
      while ((s = buffer.readLine()) != null) { 
      response += s; 
      } 

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

    @Override 
    protected void onPostExecute(String result) { 
     textView.setText(result); 
    } 
    } 

<String, Void, String> в AsyncTask являются:

  1. Тип параметра, который передается в doInBackground.
  2. Тип значения, указывающий ход выполнения задачи.
  3. Тип приведенного значения.

В doInBackground вы должны выполнить свои «тяжелые» вычисления. onPostExecute исполняется на финише doInBackground.

Чтобы выполнить ваш AsyncTask просто позвоните execute(url1, url2, ...)

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