有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

为什么这个代码不起作用


共 (6) 个答案

  1. # 1 楼答案

    public void methodName(final View view) {
    // Do your tasks here
    }
    

    您应该更改代码以发送网络操作

    网络操作必须在后台进行

    否则你会得到NetworkOnMainThreadException

    Example

  2. # 4 楼答案

    使用AsyncTask发送到php文件并在onPreexecute上打印

  3. # 5 楼答案

    改变你的方法

    public void postData(String toPost) {
    

    public void postData(View v) {...}
    

    您应该将视图作为onClick()方法的参数传递

  4. # 6 楼答案

    请看这里:

    传递给onClickattributeandroid:onClick方法名必须是公共的,并且接受视图作为其唯一参数

    表示方法必须如下所示:

    public void postData(View view) {
      ....
    }
    

    当前实现中的第二个重要点是在UI线程上调用HttpClient.execute,这可能会导致:

    NetworkOnMainThreadException例外

    要避免此异常,请使用AsyncTask在后台线程中发出api请求