2012-04-27 3 views
1

Я новичок в создании приложений для Android и в первый раз с использованием asynctask. Я хочу запустить httpost на заднем плане, но все равно получаю ошибки. Я использую правильные параметры ?. Нужен ли мне посттекстус?asynctask httpost?

Вот мой код

общественного недействительными отправить (View v) { новый sendtask() Execute(). }

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


    String msg = msgTextField.getText().toString(); 
    String msg1 = spinner1.getSelectedItem().toString(); 
    String msg2 = spinner2.getSelectedItem().toString(); 


    protected String doInBackground(String...url) { 

      try { 

       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://10.0.2.2:80/test3.php"); 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);; 
       nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
       nameValuePairs.add(new BasicNameValuePair("name", msg)); 
       nameValuePairs.add(new BasicNameValuePair("gender",msg1)); 
       nameValuePairs.add(new BasicNameValuePair("age",msg2)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));     
       httpclient.execute(httppost); 

       msgTextField.setText(""); // clear text box 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 
     return null; 
+0

Должен прочитать, что такое сообщение в Logcat .. Было более полезно, чем «Я получил ошибку» –

+0

Извините, я забыл добавить лог-кота. – user1356620

ответ

1

OnPostExecute используется, если вам необходимо обновить пользовательский интерфейс (вы не можете обновить пользовательский интерфейс в методе doInBackground (String. .. гиперссылка)), параметр получен OnPostExecute, это значение возвращается по doInBackground (String. .. url), а не в том случае, если ваше дело имеет отношение к пользователю, сообщите вам, если сообщение было сделано

0

Вы также должны включить ошибки, чтобы помочь в определении и решении проблемы, но в этом случае вероятно, является следующим:

private class sendtask extends AsyncTask<String, Void, String> { 
    String msg = msgTextField.getText().toString(); 
    String msg1 = spinner1.getSelectedItem().toString(); 
    String msg2 = spinner2.getSelectedItem().toString(); 

    protected String doInBackground(String... url) { 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://10.0.2.2:80/test3.php"); 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4); 
      nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
      nameValuePairs.add(new BasicNameValuePair("name", msg)); 
      nameValuePairs.add(new BasicNameValuePair("gender", msg1)); 
      nameValuePairs.add(new BasicNameValuePair("age", msg2)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      httpclient.execute(httppost); 

      return ""; 
     } catch (ClientProtocolException e) { 
      return "ClientProtocolException"; 
     } catch (IOException e) { 
      return "IOException"; 
     } 
    } 

    protected void onPostExecute(String result) { 
     msgTextField.setText(result); // clear text box 
    } 
} 

Важным изменением является то, что msgTextField.setText(""); находится в onPostExecute() и получает текст, который будет отображаться от doInBackground(). Вы должны выполнить каждое изменение пользовательского интерфейса в основном потоке, то есть не в doInBackground().

+0

большое спасибо. которые решают проблему. – user1356620