2012-10-03 165 views
2

我已經創建了一個應用程序,用戶在其中輸入名稱,並且按下按鈕發送時,遠程服務器的表單將從用戶輸入中填充。但不知何故它不工作,它沒有填充輸入框,我沒有得到任何錯誤,所以我不知道什麼是錯的。HttpClient沒有填寫遠程站點的輸入框

這裏是我的mainactivity.java

public class MainActivity extends Activity { 
    Button send; 
    EditText name; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     name = (EditText) findViewById(R.id.etFName); 
     send = (Button) findViewById(R.id.bSend); 

     final String sname = name.getText().toString(); 

     send.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       new Thread(new Runnable() 
       { 
        public void run() 
        { 
         // TODO Auto-generated method stub 
         HttpClient postClient = new DefaultHttpClient(); 
         String postReq = "http://10.0.2.2/formcode.php"; 
         HttpPost request = new HttpPost(postReq); 
         List<NameValuePair> postParams = new ArrayList<NameValuePair>(); 
         postParams.add(new BasicNameValuePair("element_8_1", sname)); 
         UrlEncodedFormEntity postEntity = null; 
         try { 
          postEntity = new UrlEncodedFormEntity(postParams); 
         } catch (UnsupportedEncodingException e) { 
          e.printStackTrace(); 
         } 

         request.setEntity(postEntity); 

         HttpResponse response = null; 
         try { 
          response = postClient.execute(request); 
         } catch (ClientProtocolException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } 
       }).start(); 

       String url = "http://10.0.2.2/formcode.php"; 
       Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

在此先感謝代碼。

EDITED

這裏是站點代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>App Test Form</title> 
<link rel="stylesheet" type="text/css" href="./data/form_6/css/view.css" media="all" /> 
<script type="text/javascript" src="js/view.js"></script> 
<script type="text/javascript" src="js/calendar.js"></script> 
</head> 
<body id="main_body" > 

    <img id="top" src="images/top.png" alt="" /> 
    <div id="form_container"> 

     <h1><a>App Test Form</a></h1> 
     <form id="form_6" class="digitalfuture" method="post" action="#main_body"> 
        <div class="form_description"> 
      <h2>App Test Form</h2> 
      <p></p> 
     </div>      
      <ul > 

        <li id="li_8" > 
     <label class="description">Name <span id="required_8" class="required">*</span></label> 
     <span> 
      <input id="element_8_1" name= "element_8_1" class="element text" maxlength="255" size="8" value="" /> 
      <label>First</label> 
     </span> 
     <span> 
      <input id="element_8_2" name= "element_8_2" class="element text" maxlength="255" size="14" value="" /> 
      <label>Last</label> 
     </span><p class="guidelines" id="guide_8"><small>Please tell us your name</small></p> 
     </li>  <li id="li_9" > 
     <label class="description">Phone Number <span id="required_9" class="required">*</span></label> 
     <span> 
      <input id="element_9_1" name="element_9_1" class="element text" size="3" maxlength="3" value="" type="text" /> - 
      <label for="element_9_1">(###)</label> 
     </span> 
     <span> 
      <input id="element_9_2" name="element_9_2" class="element text" size="3" maxlength="3" value="" type="text" /> - 
      <label for="element_9_2">###</label> 
     </span> 
     <span> 
      <input id="element_9_3" name="element_9_3" class="element text" size="4" maxlength="4" value="" type="text" /> 
      <label for="element_9_3">####</label> 
     </span> 
     <p class="guidelines" id="guide_9"><small>Please tell us your phone number</small></p> 
     </li>  <li id="li_10" > 
     <label class="description">Alternate Phone Number </label> 
     <span> 
      <input id="element_10_1" name="element_10_1" class="element text" size="3" maxlength="3" value="" type="text" /> - 
      <label for="element_10_1">(###)</label> 
     </span> 
     <span> 
      <input id="element_10_2" name="element_10_2" class="element text" size="3" maxlength="3" value="" type="text" /> - 
      <label for="element_10_2">###</label> 
     </span> 
     <span> 
      <input id="element_10_3" name="element_10_3" class="element text" size="4" maxlength="4" value="" type="text" /> 
      <label for="element_10_3">####</label> 
     </span> 
     <p class="guidelines" id="guide_10"><small>Please tell us an alternate phone number to contact you at</small></p> 
     </li>  <li id="li_11" > 
     <label class="description" for="element_11">Email <span id="required_11" class="required">*</span></label> 
     <div> 
      <input id="element_11" name="element_11" class="element text medium" type="text" maxlength="255" value="[email protected]" /> 
     </div> 
     </li> 

    </div> 
    <img id="bottom" src="images/bottom.png" alt="" /> 
    </body> 
</html> 
+0

因爲您的請求與上一個不同。理想情況下,你不應該這樣做,但如果你堅持這樣做的方式將採取的迴應,並顯示在本地瀏覽器的應用程序。 – user210504

+0

那麼我該怎麼做呢? – philip

+0

不要在'onCreate'中使用'Thread'類。通過使用[This example]中的'AsyncTask'將連接做爲後臺任務(http://anujarosha.wordpress.com/2012/01/27/handling-http-post-method-in-android/) – AnujAroshA

回答

2

我認爲這可能是因爲你的參數發送的值是空白。 sname設置在onClickListener之外,因此當按鈕被點擊時該值不會更新。它只是獲得文本框中已有的值。按照AnujAroshA的建議,我建議將代碼移到AsyncTask(這裏有很多很好的教程)。你想有這樣的事情:

private class SubmitForm extends AsyncTask<String, Void, Void>{ 
    @Override 
    protected Void doInBackground(String... params) { 
       String sName = params[0]; 

       // Rest of the code you had here 
      } 
} 

這將做的是創建一個任務,在後臺運行而不是在UI線程。然後運行它,只需修改onClickListener

public void onClick(View v) { 
    new SubmitForm().execute(name.getText().toString()); 
} 

這樣,那麼這將真正開始riequest。它與你使用Thread的方式類似,但是更多的機器官方版本。

+0

好吧先生謝謝,我正在閱讀一篇關於asynctask的文章,這是我的第一次這個所以這可能需要一些時間,你會是一個非常大的幫助。 – philip

+0

我在這行代碼 'new SubmitForm(name.getText())。execute();我將代碼更改爲這個新的SubmitForm(name.getText()。toString()) .execute();'但我仍然得到這個錯誤'構造函數MainActivity.SubmitForm(字符串)是未定義的' – philip

+0

糟糕,我的錯!將'name.getText()。toString()'部分移到'execute'調用中。我更新了示例 – compuguru