我创建了一个用户输入名称的应用程序,当按下按钮发送时,来自远程服务器的表单将从用户输入中填充。但不知何故它不起作用,它没有填充输入框,我没有收到任何错误,所以我不确定什么是错的。
这是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="your@email.com" />
</div>
</li>
</div>
<img id="bottom" src="images/bottom.png" alt="" />
</body>
</html>
答案 0 :(得分:2)
我认为这可能是因为您在参数中发送的值是空白的。 sname
设置在onClickListener
之外,因此单击按钮时该值不会更新。它只是获取文本框中已有的值。我建议将代码移动到AsyncTask(这里有很多很好的教程)AnujAroshA建议。你想要这样的东西:
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
的方式相似,但更多的是官方的官方。