2013-07-22 4 views
0

Я создаю клиент HTTP для выполнения PHP-файл на моем сервере и это код:Создание соединения HTTP через Android

try 
{ 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://yasinahmed.cpa10.com/sendnoti.php"); 
    HttpResponse response = httpclient.execute(httppost); 

    Toast.makeText(GCMMainActivity.this, "Done", Toast.LENGTH_LONG).show(); 
} 
catch(Exception e) 
{ 
    Toast.makeText(GCMMainActivity.this, "error", Toast.LENGTH_LONG).show(); 
} 

Много раз я использовал этот код и он работает без проблем, но на этот раз, когда я выполняю код, он всегда переходит к исключению и печатает ошибку. На этот раз я использовал AVD с уровнем API Google 17, так это проблема или есть еще одна проблема в коде?

+0

Что исключение/ошибки вы получаете? Можете ли вы опубликовать свой вывод Logcat? – Jaguar

+0

Исключение составляет Android.os.NetworkInMainThreadException – user2597622

ответ

1

Это исключение возникает, когда приложение пытается выполнить сетевую операцию в своем основном потоке. Выполнить свой код в AsyncTask:

class Preprocessing extends AsyncTask<String, Void, Boolean> { 

    protected Boolean doInBackground(String... urls) { 
     try 
     { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://yasinahmed.cpa10.com/sendnoti.php"); 
      HttpResponse response = httpclient.execute(httppost); 
      return true;  
     } 
     catch(Exception e) 
     {   
      return false; 
     } 
    } 
    protected void onPostExecute(Boolean result) { 
     if(result) 
      Toast.makeText(GCMMainActivity.this, "Done", Toast.LENGTH_LONG).show(); 
     else 
      Toast.makeText(GCMMainActivity.this, "error", Toast.LENGTH_LONG).show(); 
    } 
} 

вызов этого класса в вашей деятельности:

new Preprocessing().execute(); 

Не забудьте добавить это AndroidManifest.xml файл:

<uses-permission android:name="android.permission.INTERNET"/> 
+0

Jaguar: Большое спасибо, что сейчас это прекрасно, но почему в моем коде не работает, так как его работа, вероятно, в других проектах?! делает ли версия андроида другой? и есть ли у вас статья об асинхронном чтении? – user2597622

+0

@ user2597622 Он работал с тех пор, как вы использовали более старую версию Android, поддерживающую сетевые операции по основной теме – Jaguar

+0

Aha Ok спасибо alot :) – user2597622

0

Это поможет узнать об ошибке. Но, поскольку я должен угадать, моя ставка заключается в том, что вы пытаетесь выполнить этот код в главном потоке событий (a.k.a. поток пользовательского интерфейса). Это всегда было неправильно, и с уровня API уровня 11 он будет вызывать NetworkOnMainThreadException. См. Документ Designing for Responsiveness для правильного способа взаимодействия с сетью в Android.

+0

Я пытаюсь выполнить его в функции clicklistner кнопки – user2597622

+1

@ user2597622 - Это, по крайней мере, часть проблемы. Слушатель вызывается в потоке событий. Вам нужно запустить рабочий поток (например, ['AsyncTask'] (http://developer.android.com/reference/android/os/AsyncTask.html)), чтобы инициировать сетевые подключения. –

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