2014-12-08 2 views
0

Я не использовал AsyncTask, прежде чем я также не понял некоторые учебные пособия, поэтому я действительно не знаю, как применить его при выполнении HttpClient. Просьба помочь мне в этом виде реализации вот исходный код сделали:Применение Asynctask на HttpClient

public void commandModule(String url) { 
try { 
    HttpClient httpClient = new DefaultHttpClient(); 
    httpClient.execute(new HttpGet(url)); 

} catch (Exception e) { 

} 

} 


@Override 
public void onClick(View v) { 
if (checkBox1.isChecked()) { 
    commandModule("http://192.168.1.102/?command1"); 
} else { 
    commandModule("http://192.168.1.102/?command2"); 
} 

if (checkBox2.isChecked()) { 
    commandModule("http://192.168.1.102/?command3"); 
} else { 
    commandModule("http://192.168.1.102/?command4"); 
} 

}

+0

увидеть это http://stackoverflow.com/questions/9954477/async-http-post-android – amit

ответ

0
public void commandModule(String url) { 
     new RequestTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,url); 

} 


private class RequestTask extends AsyncTask<String,Void,Void>{ 
    protected void doInBackground(String... args){ 

     String url=args[0]; 
     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      httpClient.execute(new HttpGet(url)); 
     } catch (Exception e) { 

     } 

    } 
} 
+0

Спасибо за право ответьте только на одну вещь, я думаю, что вы должны переопределить метод doInBackground .. и API не должен быть меньше 11, который является сотовым. –

1

Если вы знаете о Ветке на Java, это будет легко для вас, чтобы понять работу Async Задача в android. В принципе, вы не можете выполнить какую-либо длительную задачу в основном потоке в android. Он заблокирует основной основной поток, и вы получите ошибку ANR (Applicaton not replying). Чтобы избежать этого, вы можете либо использовать нить, либо задачу Async. Тема имеет одно ограничение, вы не можете обновить нить нитки нитки в любом другом потоке. Таким образом, для обновления пользовательского интерфейса вам нужно отправить сообщение в поток основного/пользовательского интерфейса с помощью обработчика. Вам придется делать это каждый раз, когда вы что-то реализуете с помощью потока. Чтобы упростить, инфраструктура Android обеспечивает Async Task. Она имеет четыре методы:

  1. onPreExecute(), вызываемые в потоке пользовательского интерфейса, прежде чем задача будет выполнена. Этот шаг обычно используется для настройки задачи, например, показывая индикатор выполнения в пользовательском интерфейсе.

  2. doInBackground (Params ...), вызываемый в фоновом потоке сразу после onPreExecute() завершает выполнение. Этот шаг используется для выполнения фоновых вычислений, которые могут занять много времени. Параметры асинхронной задачи передаются на этот шаг. Результат вычисления должен быть возвращен этим шагом и будет возвращен на последний шаг. Этот шаг также может использовать publishProgress (Progress ...) для публикации одного или нескольких единиц прогресса. Эти значения публикуются в потоке пользовательского интерфейса на этапе onProgressUpdate (Progress ...).

  3. onProgressUpdate (Progress ...), вызываемый в потоке пользовательского интерфейса после вызова publishProgress (Progress ...). Время выполнения не определено. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации индикатора выполнения или отображения журналов в текстовом поле.

  4. onPostExecute (Result), вызывается в потоке пользовательского интерфейса после завершения вычисления фона. Результат вычисления фона передается на этот шаг в качестве параметра.

Итак, что когда-нибудь вы должны поместить в run() метод Thread, должен идти в doInBackground() метод.

0

AsyncTask обеспечивает правильное и простое использование нити пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками. проверить этот урок, он даст представление о ваших запросах http://programmerguru.com/android-tutorial/android-asynctask-example/

0

AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и/или обработчиками.

public void commandModule(String url) { 
try { 
new RequestTask().execute(url); 

} catch (Exception e) { 

} 

} 


@Override 
public void onClick(View v) { 
if (checkBox1.isChecked()) { 
commandModule("http://192.168.1.102/?command1"); 
} else { 
commandModule("http://192.168.1.102/?command2"); 
} 

if (checkBox2.isChecked()) { 
commandModule("http://192.168.1.102/?command3"); 
} else { 
commandModule("http://192.168.1.102/?command4"); 
} 

} 

private class RequestTask extends AsyncTask<String,Void,Void>{ 

@Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 
protected void doInBackground(String... args){ 

    String url=args[0]; 
    try { 
     HttpClient httpClient = new DefaultHttpClient(); 
     httpClient.execute(new HttpGet(url)); 
    } catch (Exception e) { 

    } 

} 

@Override 
     protected void onPostExecute() { 


     } 
} 
  1. onPreExecute() - метод Выполняется при выполнении() вызываются внутри commandModule() (сокращенно Когда AsyncTask срабатывают).
  2. doInBackground() - Выполняется при выполнении onPreExecute(). Al долго задача обрабатывается здесь
  3. onPostExecute() - Фоновая работа закончена
Смежные вопросы