2012-01-04 2 views
0

. Файл PHP успешно работает, создавая соединение db и вставляя sql. Мой единственный вывод, то это где-то в активности .java .. и да, я установил РАЗРЕШЕНИЯ ИНТЕРНЕТА в манифесте.Переменные HttpPost и ошибка PHP

МОЯ ОШИБКА: 01-03 21: 56: 05,784: Вт/System.err (1398): android.os.NetworkOnMainThreadException

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      //setContentView(R.layout.email); 
      try { 
       postInternetData(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

private void postInternetData() { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("http://www.example.com/app/insert_tag.php"); 

    try{    
     List<NameValuePair> formparams = new ArrayList<NameValuePair>(); 
     formparams.add(new BasicNameValuePair("name", "android")); 

     post.setEntity(new UrlEncodedFormEntity (formparams)); 

     HttpResponse response = httpclient.execute(post); 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 

    } 

<?php 
// CREATE the connection 
$connection = mysql_connect('XXXXXXXXXXX.db.godaddy.com','XXXXXXXXXXX','XXXXXXXXXXX'); 
if(!$connection) { 
    echo 'failure to connect host'; 
} 

$mysql_select_db = mysql_select_db('XXXXXXXXXXX', $connection); 

if(!$mysql_select_db) { 
    echo 'failure to select db'; 
} 

$name = $_POST['name']; 

$qry = "INSERT INTO httptest(id, name) VALUES ('', '" . $name . "');"; 

$result = mysql_query($qry, $connection); 
IF (!$result){ 
    echo 'failure to query db'; 
} else { 
    echo $result; 
} 
?>  

После нескольких часов поиска неисправностей с помощью примеров StackOverflow и искусственных файлов, я раза , Есть ли что-нибудь, что выделяется вам? Спасибо.

+0

Что значит «не в состоянии взаимодействовать с опубликованными переменными "означает? Что мы здесь рассматриваем? Где скрипт PHP? – deceze

+0

Я отправлю содержимое php. – wurde

+1

@Peceiver Пожалуйста, опубликуйте PHP, отредактировав свой оригинальный пост, а не в комментарии. –

ответ

1

Начиная с Android 3.0, если у вас есть сетевые операции (например, подключение к вашему сайту) в основном потоке (aka GUI), приложение выдает NetworkOnMainThreadException. Попробуйте протестировать эмулятор под управлением 2.2, чтобы убедиться, что он работает (и в вашем коде нет других ошибок). В противном случае, чтобы заставить его работать с 3.x и 4.x, вам нужно взглянуть на threading на Android. Учебник можно найти here

+0

Этот форум скалы! – wurde

0

Вероятно, StrictMode включен в потоке пользовательского интерфейса.

Try:

ThreadPolicy tp = ThreadPolicy.LAX; 
StrictMode.setThreadPolicy(tp); 

выше не рекомендуется практика, хотя, я думаю, вам нужно использовать AsyncTask.

2

Как уже упоминалось, Android больше не разрешает сетевую активность в потоке пользовательского интерфейса. Даже если бы они это сделали, вы не должны этого делать, потому что в течение всей сетевой активности пользовательский интерфейс будет не отвечать на запросы, что способствует плохому пользовательскому опыту.

Что вам нужно использовать это ASyncTask

Это, как вы бы назвать ASyncTask

new MyAsyncTask().execute(); 

И это, как вы установите его

private final class MyAsyncTask extends AsyncTask<Void,Void,Void> 
    { 
     private ProgressDialog progressdialog; 
     protected String doInBackground(Void... params) 
     { 
      try 
      { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpResponse response = httpclient.execute(new HttpGet("http://example.com/getinfo")); 
       StatusLine statusLine = response.getStatusLine(); 

       if(statusLine.getStatusCode() == HttpStatus.SC_OK) 
       {    
        //successful response     
       } 
       else 
       { 
        response.getEntity().getContent().close(); 
        throw new IOException(statusLine.getReasonPhrase()); 
       } 
      } 
      catch(Exception e) 
      { 
       ProgressDialog.show(HelloWorldActivity.this,"","Failed",true);    
      }   
     } 

     protected void onPostExecute(String result) 
     { 
      if (progressdialog.isShowing()) 
       progressdialog.dismiss(); 

      Toast.makeText(HelloWorldActivity.this,"Completed",Toast.LENGTH_SHORT).show();  
     }  

     protected void onPreExecute() 
     { 
      progressdialog = ProgressDialog.show(HelloWorldActivity.this,"","Working...",true); 
     }  
    } 
Смежные вопросы