java Android按钮onClick run方法,不幸的是应用程序已经停止
我试图将数据发布到外部PHP文件中,我有一个按钮,当我点击它时,它应该运行该方法并将数据发布到PHP文件中,然后返回一些数据并打印出来
在活动中。xml:
<Button
安卓:onClick="postData" />
在main活动中。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
为什么这个代码不起作用
# 1 楼答案
您应该更改代码以发送网络操作
网络操作必须在后台进行
否则你会得到
NetworkOnMainThreadException
Example
# 2 楼答案
为Ksoap2和异步任务引用此链接。 How can I make a ksoap2 call in async task?
不要忘记导入Ksoap2。jar文件,并在AndroidManifest文件中授予internet权限
# 3 楼答案
这是一个你想要的例子,我想你会发现它很有用
http://mobiledevtuts.com/android/android-http-with-asynctask-example/
# 4 楼答案
使用AsyncTask发送到php文件并在onPreexecute上打印
# 5 楼答案
改变你的方法
到
您应该将视图作为
onClick()
方法的参数传递# 6 楼答案
请看这里:
传递给
onClick
attribute的android:onClick方法名必须是公共的,并且接受视图作为其唯一参数表示方法必须如下所示:
当前实现中的第二个重要点是在UI线程上调用
HttpClient.execute
,这可能会导致:NetworkOnMainThreadException例外
要避免此异常,请使用AsyncTask在后台线程中发出api请求