我正在尝试将数据发布到外部PHP文件,我有一个按钮,当我点击它时,它应该运行方法并将数据发布到php文件然后返回一些数据并打印出来。
在 activity_main.xml 中:
<Button
android:onClick="postData" />
在 MainActivity.java :
中public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void postData(String toPost) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("__the_php_file.php");
String MyName = "Amr";
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("action", MyName));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = httpclient.execute(httppost, responseHandler);
String reverseString = response;
Toast.makeText(this, "response" + reverseString, Toast.LENGTH_LONG).show();
} catch (ClientProtocolException e) {
Toast.makeText(this, "CPE response " + e.toString(), Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
} catch (IOException e) {
Toast.makeText(this, "IOE response " + e.toString(), Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
}
}
}
问题是,当我点击按钮时,它会给我这个错误:Unfortunately App has stopped
为什么这段代码不起作用?
答案 0 :(得分:2)
从
更改您的方法public void postData(String toPost) {
到
public void postData(View v) {...}
您应该将查看作为onClick()
方法的参数传递。
答案 1 :(得分:2)
见这里:
传递到onClick
属性的android:onClick方法名称必须是公开的,并接受视图作为其唯一参数
表示方法必须如下:
public void postData(View view) {
....
}
当前实现中的第二个重点是在UI Thread上调用HttpClient.execute
,这可能导致:
NetworkOnMainThreadException例外。
要避免此异常,请使用AsyncTask在后台线程
中发出api请求答案 2 :(得分:1)
public void methodName(final View view) {
// Do your tasks here
}
您应该更改代码以发送网络操作。
网络操作必须在后台进行。
否则您将获得NetworkOnMainThreadException
答案 3 :(得分:1)
使用AsyncTask发送到php文件并在onPreexecute上打印
答案 4 :(得分:1)
以下是您想要的示例,我认为您会发现它很有用
http://mobiledevtuts.com/android/android-http-with-asynctask-example/
答案 5 :(得分:1)
为Ksoap2和Async Task引用此链接。 How can I make a ksoap2 call in async task?
不要忘记导入Ksoap2.jar文件并在AndroidManifest文件中提供互联网权限。