Приложение Android зависает на эмуляторе при отправке HTTPost на URL? - PullRequest
0 голосов
/ 12 сентября 2011

Я написал код в Android для отправки запроса httppost для URL, в то время как я использую локальный IP-адрес, такой как «http://x.x.x.x/myfolder/values.aspx", для публикации данных на локальном сервере, где создается виртуальный каталог для values.aspxкод, написанный ниже, работает нормально и легко отправляет данные на локальный хост. Хотя, когда в запросе httpost указан реальный URL, приложение зависает и не отвечает ни на ошибку, ни на исключение. Надоело проблему без результатов. Ответьте соответствующимПОСТ.

=============================================================================

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.xyz.com/myfolder/values.aspx");

    enter code here

try
 {
 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
 nameValuePairs.add(new BasicNameValuePair("data",txtdis.getText().toString()
+txtsys.getText().toString()+txtpulse.getText().toString()+txttemp.getText().toString()));

 nameValuePairs.add(new BasicNameValuePair("reg", "asdfghjklpoiuytr")); 

  AbstractHttpEntity ent = new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8);       
  httppost.setEntity(ent);

  httppost.addHeader("data","vacant");
  httppost.addHeader("reg","vacant");
  HttpResponse response = httpclient.execute(httppost);

 if (ent != null) 
 { 
 Log.i("RESPONSE", response.getStatusLine().toString());
 }

 HttpEntity resEntity = response.getEntity();  
 if (resEntity != null) 
 {    
                                   Log.i("RESPONSE",EntityUtils.toString(resEntity));
 }


Intent browse = new Intent( Intent.ACTION_VIEW , Uri.parse( "http://192.168.2.50/BAN_app/getvalues1.aspx" ) );

startActivity( browse );

1 Ответ

2 голосов
/ 12 сентября 2011

Вы выполняете этот запрос в UI-потоке.Это приводит к блокировке всего пользовательского интерфейса на время запроса и вызывает диалог App Not Responding (ANR) , если ваш запрос занимает более 5 секунд.

Всегда выполняйте сетевые вызовы или трудоемкие методы в другом потоке.Класс AsyncTask - отличный и простой в использовании инструмент для выполнения этой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...